这个问题/答案涉及一个非常相似的主题,但我找不到我正在寻找的解决方案。 How to practially use a keywordanalyzer in azure-search?
开始情况:
我创建了一个包含多个索引的资源。其中一个索引包含Collection(Edm.String)字段。 从这个字段我只想获得准确包含搜索词的文档。例如,该字段包含以下文档:“Hovercraft zero”,“Hovercraft one”,“Hovercraft two”。
如果搜索字词为“悬停”,则应返回所有三个文档。如果搜索词是“craft zer”,则只返回文档“Hovercraft zero”。该文件不应该得到更高的分数,理想的行为是我只得到“气垫船归零”文件。
更多信息:
无法将searchmode设置为all(就像在顶部的问题中建议的那样),因为我只想为此特定字段设置此行为,而不是为所有搜索查询设置此行为。也不可能让用户有责任使用引号输入搜索词。
到目前为止我尝试过:
这个问题有什么解决方案吗? 或者是否有其他方法可以实现所需的行为?
希望有人可以提供帮助。
提前致谢!
答案 0 :(得分:0)
使用你的三个文件的例子:“Hovercraft zero”,“Hovercraft one”,“Hovercraft two”
发出prefix query以查找包含以“Hover”开头的字词的所有文档
搜索=悬停*
要匹配术语“craft zer”,您需要在索引时使用关键字analyzer(或带有小写标记过滤器的关键字标记生成器),以确保字符串集合的元素不会被标记化。然后在查询时您可以发出regex query(注意正则表达式查询比术语或前缀查询慢得多)
search = /。 craft zer。 /& queryType = full
另外,请使用Analyze API测试自定义分析仪配置。它将帮助您确保分析仪产生您期望的术语。
答案 1 :(得分:0)
感谢@Yahnoosh的回答,我找到了一个适合我的解决方案。
简短的例子: 我有一个包含三个字段的索引(field1,field2,field3)。从field3我想要一个文件完全包含搜索词的结果。从field1和field2我想得到一个“标准”结果。
解决方案: 我操纵搜索查询到 - >
field1:{searchterm} || field2:{searchterm} || field3:“{searchterm}”& queryType = full
使用此searchquery field1和field2以“标准”方式查询,并使用我正在搜索的行为查询field3。当然,有更有效和优雅的方法来解决这个问题,但它对我有用。
如果有人有更好的解决方案,请告诉我;)