嵌套查询返回奇怪的结果.elasticsearch

本文关键字:结果 elasticsearch 查询 返回 嵌套 | 更新日期: 2023-09-27 18:09:21

这是我的客户端代码:

设置>
var defaultSettings = new ConnectionSettings(
    uri: new System.Uri("http://localhost:9200")
);
defaultSettings.SetJsonSerializerSettingsModifier(s => {
    s.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
defaultSettings.SetConnectionStatusHandler(c => {
    if(!c.Success) throw new Exception(c.ToString());
});
defaultSettings.SetDefaultIndex("projects");

执行代码

public ActionResult Search(String searchTerm) {
    var result = this.searchClient.Search<ProjectIndexModel>(
        descriptor: new SearchDescriptor<ProjectIndexModel>().Index("projects").AllTypes().Query(
            query: q => q.QueryString(qs => qs.Query(searchTerm)
        )
    ));
    // or
    /* 
    var results = this.searchClient.Search<ProjectIndexModel>(s =>
        s.Index("projects").Type("project").Query(q => 
            q.Term(f => f.ProblemDefinition, searchTerm) || 
            q.Term(f => f.Name, searchTerm) ||
            q.Term(f => f.SuggestedSolution, searchTerm) ||
            q.Term(f => f.Initiator, searchTerm)
        )
    );        
    */
    return Json(result.Documents.ToList());
}

索引在应用程序启动时启动:

foreach(var project in this.dbContext.Projects) {
    var indexModel = Mapper.Map<ProjectIndexModel>(project);
    searchClient.Index(indexModel, "projects", "project", indexModel.Id.ToString());
}

索引存在于数据库中(这与我现在的不完全相同,但模式保持不变)。

what have I tried:

控制器动作返回(默认)10次点击 11个文档。这就像完全忽略了搜索,没有明显的错误。

Fiddler{host:9200}/_search{host:9200}/projects/project/_search POST请求的查询结果

均为阳性(1 hit)
{
    "query": {
        "query_string": {
            "query": "original"
        }
    }
}

有什么问题吗?

嵌套查询返回奇怪的结果.elasticsearch

问题不在NEST。在研究了results.ConnectionStatus.ToString()之后,它显示了与Fiddler一样的命中,我发现问题出在我的客户端代码中。我忽略了在没有指定{searchTerm: $scope.searchTerm}的情况下发送POST:

$http({
    url: '/projects/search',
    method: "POST",
    data: { searchTerm: $scope.searchTerm }
})
.success(function(data, status, headers, config) {
    $scope.projects = data.documents;
}).error(function(data, status, headers, config) {
    console.log('error: ' + data);
});