我正在索引网站列表,而网址是网站的属性之一(名称,位置是其他网站)。我想使用url / s搜索网站。我不想分析这个属性,想要搜索完整的url(关键字)。所以我的代码看起来像这样。
[Keyword(index = true)]
public IEnumerable<string> Urls {get; set;}
创建索引后,映射如下所示: “网址”:{ “type”:“关键字” }
但是,当我搜索网址时,请说“www.yahoo.com”,不会返回任何结果。 两个问题:
a)为什么不归还文件?这是一个简单的关键字搜索,因此应返回匹配。
b)使用默认分析器进行上述索引是否相同?在我看来,没有分析的关键字搜索是“明确的”,可能更快。
感谢。
PS:我的搜索代码使用Nest(v5.0.0.0),如下所示。
public SearchResult<Website> Search(string qry, int page, int pageSize)
{
var result = client.Search<Website>(x => x.Query(q => q.MultiMatch(mp => mp.Query(qry).Fields(f => f.Fields(f1 => f1.Name, f2 => f2.Urls, f3 => f3.Locations)))).Size(pageSize));
return new SearchResult<Website>
{
Results = result.Documents
};
}
答案 0 :(得分:1)
当您使用type=keyword
作为全文查询(即匹配查询)查询字段时,它会使用默认为分析器设置的search_analyzer
。
在索引时,Elasticsearch将按此顺序查找分析器:
在查询时,还有一些层:
假设您没有上面定义的内容,那么standard analyzer正在分析您的查询输入,这会根据特定的分隔符进行拆分
FIX:
[search_analyzer][2]
的字段映射更新为Keyword Analyzer