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

时间:2017-04-06 11:03:40

标签: azure azure-search

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

开始情况:

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

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

更多信息:

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

到目前为止我尝试过:

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

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

希望有人可以提供帮助。

提前致谢!

2 个答案:

答案 0 :(得分:0)

使用你的三个文件的例子:“Hovercraft zero”,“Hovercraft one”,“Hovercraft two”

  1. 发出prefix query以查找包含以“Hover”开头的字词的所有文档

    搜索=悬停*

  2. 要匹配术语“craft zer”,您需要在索引时使用关键字analyzer(或带有小写标记过滤器的关键字标记生成器),以确保字符串集合的元素不会被标记化。然后在查询时您可以发出regex query(注意正则表达式查询比术语或前缀查询慢得多)

    search = /。 craft zer。 /& queryType = full

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

答案 1 :(得分:0)

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

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

解决方案: 我操纵搜索查询到 - >

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

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

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