2017-04-06 71 views
0

这个问题处理了一个非常相似的主题,但我找不到我正在寻找的解决方案。 How to practially use a keywordanalyzer in azure-search?Azure搜索:如何获取包含检索词的文档

启动状态:

我创建了多个索引的资源。其中一个索引包含一个Collection(Edm.String)字段。 从这个领域,我只想获得包含搜索词的文档。例如,该字段包含如下的文档:“气垫船零”,“气垫船一”,“气垫船二”。 如果搜索词是“悬停”,则应返回所有三个文档。如果搜索项是“craft zer”,则只应返回文档“Hovercraft zero”。该文件不应该得到更高的分数,所需的行为是我只得到“气垫船零”文件作为结果。

更多信息:

这是不可能的设置所述搜索到所有的(就像是在顶部的问题recomended),因为我只想设置此行为这一特定领域,而不是对所有searchqueries 。也不可能让用户的责任用引号输入搜索词。

我试过至今:

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

有没有解决这个问题的方法? 或者还有其他的方法来达到预期的行为吗?

希望有人可以提供帮助。

在此先感谢!

回答

0

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

  1. 问题一个prefix query查找包含术语以“哈弗”

    开始的所有文件

    搜索=哈弗*

  2. 要匹配的术语“工艺寿”,你需要使用的索引时间的关键字分析仪(或小写令牌过滤关键字标记生成器),让您的串的集合确保元素ñ没有标记。然后在查询时您可以发出regex query(注意正则表达式查询比术语或前缀查询慢得多)

    search = /。 工艺zer。/&查询类型=全

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

+0

很好的答案,谢谢。但我认为我没有详细解释我们的问题。我知道可以像这样操纵搜索查询,但遗憾的是,它不是我们的选择。我们在用户插入搜索词的主页上实施了一个搜索栏。然后我们通过API将这个术语传递给我们的资源来浏览我们的一个索引。因此不可能操纵每一个搜索查询。我正在寻找一个解决方案,只有这个索引的一个领域被自动查询所需的行为。其他领域应该以其他方式查询。 – maxhoefler

0

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

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

解决方案: 我操纵SEARCHQUERY到 - >

FIELD1:{搜索关键词} || field2:{searchterm} || field3:“{searchterm}”& queryType = full

使用此搜索查询字段1和字段2以“标准”方式查询,字段3用我正在搜索的行为查询。当然,有更高效和优雅的方式来解决这个问题,但它对我有用。

如果有人有更好的解决方案,让我知道;)

+0

太棒了,这是一种常见的模式。我们刚刚发布了一篇文章,解释了Azure Search如何在后端工作:https://docs.microsoft.com/en-us/azure/search/search-lucene-query-architecture。它旨在帮助Azure搜索用户了解如何自定义其搜索服务的行为。 – Yahnoosh

相关问题