Azure搜索:如何获取完全包含搜索词的文档

问题描述 投票:0回答:2

这个问题/答案涉及一个非常相似的主题,但我找不到我正在寻找的解决方案。 How to practially use a keywordanalyzer in azure-search?

起始情况:

我创建了一个包含多个索引的资源。其中一个索引包含Collection(Edm.String)字段。从这个字段我只想获得准确包含搜索词的文档。例如,该字段包含如下文档:“Hovercraft zero”,“Hovercraft one”,“Hovercraft two”。

如果搜索词是“悬停”,则应返回所有三个文档。如果搜索词是“craft zer”,则只返回文档“Hovercraft zero”。该文件不应该获得更高的分数,期望的行为是我只得到“气垫船零”文件作为结果。

更多的信息:

无法将searchmode设置为all(就像在顶部的问题中建议的那样),因为我只想为此特定字段设置此行为,而不是为所有搜索查询设置此行为。也不可能让用户负责输入带引号的搜索词。

到目前为止我尝试过的:

  • 使用关键字分析器就像在顶部的问题中描述的那样:没有成功
  • 使用带有特定令牌过滤器(ngram,小写)和searchanalyzer作为关键字分析器的indexanalyzer:不成功
  • 使用Charfilters操作搜索词并在第一个和最后一个位置手动设置引号(工艺zer - >“craft zer”)。就像Yahnoosh在顶部的问题中解释的那样,查询解析器在应用分析器之前处理查询字符串。所以:没有成功

这个问题有什么解决方案吗?或者是否有其他方法可以实现所需的行为?

希望有人可以提供帮助。

提前致谢!

azure azure-search
2个回答
0
投票

使用你的三个文件的例子:“气垫船零”,“气垫船一号”,“气垫船二号”

  1. 发出prefix query以查找包含以“Hover”开头的术语的所有文档 搜索=哈弗*
  2. 要匹配术语“craft zer”,您需要在索引时使用关键字分析器(或带有小写标记过滤器的关键字标记生成器),以确保字符串集合的元素不被标记化。然后在查询时你可以发出regex query(注意正则表达式查询比术语或前缀查询慢得多) search = /.craft zer ./&queryType=full

另外,请使用Analyze API测试您的自定义分析仪配置。它将帮助您确保分析仪生成您期望的术语。


0
投票

感谢@Yahnoosh的回答,我找到了一个适合我的解决方案。

简短示例:我有一个包含三个字段的索引(field1,field2,field3)。从field3我想要一个文件完全包含搜索词的结果。从field1和field2我想得到一个“标准”的结果。

解决方案:我将searchquery操作为 - >

field1:{searchterm} || field2:{searchterm} || field3:“{searchterm}”&queryType = full

使用此searchquery field1和field2以“标准”方式查询,并使用我正在搜索的行为查询field3。当然,有更有效和优雅的方法来解决这个问题,但它对我有用。

如果有人有更好的解决方案,请告诉我;)

© www.soinside.com 2019 - 2024. All rights reserved.