gpt4 book ai didi

elasticsearch - Index = true的属性关键字在搜索中失败

转载 作者:行者123 更新时间:2023-12-03 01:47:26 27 4
gpt4 key购买 nike

我正在索引网站列表,而Urls是网站的属性之一(名称,位置是其他属性)。我想使用网址搜索网站。我不想分析此属性,而是要搜索完整的URL(关键字)。所以我的代码看起来像这样。

[Keyword(index = true)]
public IEnumerable<string> Urls {get; set;}

创建索引后,映射如下所示:
“网址”:{
“type”:“关键字”
}

但是,当我搜索URL时,说“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
};
}

最佳答案

当您使用type=keyword作为全文查询(即匹配查询)查询字段时,它将使用search_analyzer默认为分析器设置。

在索引时间,Elasticsearch将按以下顺序查找分析器:

  • 在字段映射中定义的分析器。
  • 在索引设置中名为default的分析器。
  • 标准分析器。

  • 在查询时,还有更多层:
  • 在全文查询中定义的分析器。
  • 在字段映射中定义的search_analyzer。
  • 在字段映射中定义的分析器。
  • 在索引设置中名为default_search的分析器。
  • 在索引设置中名为default的分析器。
  • 标准分析器。

  • 假设您没有上述定义,那么 standard analyzer将分析您的查询输入,从而根据特定的分隔符对其进行拆分

    FIX:
  • [search_analyzer][2]的字段映射更新为Keyword Analyzer
  • 使用term query
  • 关于elasticsearch - Index = true的属性关键字在搜索中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42824019/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com