返回天蓝色搜索中仅与精确搜索词匹配的记录

时间:2017-04-10 20:34:58

标签: azure search azure-search

所以我是Azure搜索新手,我才开始明白这一点。我有一个搜索索引,用于查询非常简单的sql视图以匹配记录。我在找到我搜索的单词的完全匹配时遇到了很大的麻烦。

每当我搜索时,我只获得具有确切单词的记录。但是我也得到包含搜索到的单词的记录,例如我搜索“类型”并且我得到“新类型”和“我的类型”。我在搜索时用双引号括起“Type”。

我正在使用C#SDK,当我通过Postman执行搜索时也会发生这种情况:

https://myapp.search.windows.net/indexes/myindex/docs?$select=AlertDate,DocumentName,City,DocumentType&search=(DocumentType:"Type")&$count=true&queryType=full&searchMode=any&api-version=2016-09-01

知道可能导致这种情况的原因以及我如何才能获得完全匹配?我已经阅读了很多内容,并且有几篇帖子和网页说用双引号括起搜索词将只得到确切的术语,但这似乎不正确,至少不适合我。

编辑:

为了完整性,我应该添加我在C#中使用的调用来检索结果:

var result = await indexClient.Documents.SearchAsync(query, new SearchParameters()   
{ Facets = parameters.Facets, QueryType = QueryType.Full, SearchMode = SearchMode.Any,   
Top = request.Top, Skip = request.Skip, IncludeTotalResultCount = true });

有时搜索只是一个单词或多个单词,有时候它可能是用户从下拉菜单中选择的过滤器,例如国家和城市,或两者的组合。然后我形成如下的查询字符串:

(Country:"France" OR "Germany") AND (City:"Paris")

如果它还包含搜索词,则查询将如下所示:

"Type" AND (Country:"Italy" OR "France") AND (City:"Paris" OR "Rome")

2 个答案:

答案 0 :(得分:2)

用双引号括起查询会将其转换为短语查询。这仅在引号之间有多个术语时才有意义,由空格,标点符号等分隔。例如,如果搜索字符串为Hello world,则它将匹配包含“hello”或“world”的文档(如果您使用searchMode的默认any并假设您未明确使用任何其他运算符,但如果您的搜索字符串为"Hello world",则文档仅匹配术语彼此相邻。

查看您的查询,我猜您要按分类数据进行过滤。如果你真的想要一个完全匹配(区分大小写),那么你应该使用$ filter而不是search:

https://myapp.search.windows.net/indexes/myindex/docs?$select=AlertDate,DocumentName,City,DocumentType&$filter=DocumentType eq 'Type'&$count=true&queryType=full&searchMode=any&api-version=2016-09-01

以下是在Azure搜索中构建过滤器和搜索查询的一些有用链接:

https://docs.microsoft.com/rest/api/searchservice/lucene-query-syntax-in-azure-search https://docs.microsoft.com/rest/api/searchservice/odata-expression-syntax-for-azure-search

答案 1 :(得分:0)

如果要执行完全匹配,为什么不尝试使用OData过滤器?在这种情况下,您的查询将变为$ filter = DocumentType eq' Type'

请注意,如果你是azure搜索的预览版,api-version = 2015-02-28-Preview,他们已经为部分匹配添加了新的过滤器。

search.ismatch(" filedvalue"," fieddname")和saerch.ismatchscoring()

另外,您检查了自定义分析器吗?如果您知道您将始终在少数字段中执行完全匹配,请使用"关键字"具有小写标记器的分析器

https://docs.microsoft.com/en-us/rest/api/searchservice/custom-analyzers-in-azure-search