1
這是我的客戶端代碼:嵌套查詢返回奇怪的結果。 elasticsearch
設置
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());
}
Indexes存在於數據庫中(這與我現在不完全相同,但架構保持不變)。
你有什麼我試圖:
控制器動作返回(默認)10命中11個文件。這就像搜索被完全忽略,沒有可見的錯誤。
Fiddler
了陽性結果(1次命中),既爲{host:9200}/_search
和{host:9200}/projects/project/_search
POST請求與查詢:
{
"query": {
"query_string": {
"query": "original"
}
}
}
什麼問題?
對不起,我不知道c#。但是,如果您不指定默認字段,那麼在查詢字符串查詢中,您將最終搜索所有字段。如果您不指定默認操作員,您將搜索健康或護理。因此,文檔中任何位置的任何單詞都會使其匹配。 (我沒有訪問提供的鏈接,這裏,所以這只是一個猜測) – DeH
但我的意圖是準確地搜索所有領域。爲什麼它返回結果,然後如果沒有匹配? – lexeme
也許在這些文檔的另一個領域有健康或護理。即使是在你的文檔的任何字段上的「我愛鴨子」都會匹配。您是否肯定在一些匹配文檔中沒有這兩個詞出現? – DeH