【发布时间】:2015-03-07 20:20:59
【问题描述】:
我正在索引以下 Document 类以进行索引:
public class DoctorDocument
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public int Experience { get; set; }
}
我正在使用以下代码来搜索索引。
var node = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(
node,
defaultIndex: "my-application"
);
var client = new ElasticClient(settings);
var searchResults = client.Search<DoctorDocument>(s => s.From(0)
.Size(100)
.Query(q =>
q.Term(t => t.Name, "Deepak Singhal"))
);
由于某种原因,searchResults 没有返回任何文档,即使索引中有一个名称“Deepak Singhal”。任何关于为什么什么都没有返回的指针?
【问题讨论】:
-
请检查(如果可以,请发布)您的映射。请记住,您使用的 Term 查询“匹配具有包含搜索词的字段的文档(未分析)”。也就是说“Deepak Singhal”在被搜索之前没有被分析。如果您使用的是默认分析器,请尝试搜索“deepak”。见这里:elasticsearch.org/guide/en/elasticsearch/reference/current/…
-
Mappings 的字段“name”小写,在类型-“doctordocument”下又是小写。当我在浏览器中通过 Id 查询时,我可以看到文档来源。
-
当您索引文档“Deepak Singhal”时,默认分析器(我想您使用的)创建了 2 个标记“deepak”和“singhal”。使用术语查询进行搜索时,不会像这样分析查询字符串。尝试匹配查询“q.match(t => t.Name, "Deepak Singhal")”。现在对搜索查询进行分析,应该会为您带来结果。
-
感谢@Manolis,匹配查询描述符有效。谢谢你的解释。
标签: elasticsearch nest