从azure search返回仅与确切搜索词匹配的记录

从azure search返回仅与确切搜索词匹配的记录,azure,search,azure-cognitive-search,Azure,Search,Azure Cognitive Search,所以我是Azure搜索的新手,我才刚刚开始了解它。我有一个搜索索引,它可以查询一个非常简单的sql视图以查找匹配的记录。我很难找到与我搜索的词完全匹配的词 每当我搜索时,我只会得到准确单词的记录。。但是,我也会得到包含搜索词的记录,例如我搜索类型,我得到新类型和我的类型。搜索时,我用双引号将类型括起来 我使用的是C SDK,当我通过Postman执行搜索时也会发生这种情况: https://myapp.search.windows.net/indexes/myindex/docs?$select

所以我是Azure搜索的新手,我才刚刚开始了解它。我有一个搜索索引,它可以查询一个非常简单的sql视图以查找匹配的记录。我很难找到与我搜索的词完全匹配的词

每当我搜索时,我只会得到准确单词的记录。。但是,我也会得到包含搜索词的记录,例如我搜索类型,我得到新类型和我的类型。搜索时,我用双引号将类型括起来

我使用的是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 });
有时搜索可能只是一个单词或多个单词,有时则可能是用户从下拉列表(如国家/地区和城市)中选择的过滤器,或两者的组合。然后,我形成如下查询字符串:

国家:法国或德国,城市:巴黎

如果还包括搜索词,则查询如下所示:


类型和国家:意大利或法国和城市:巴黎或罗马

用双引号将查询括起来将其转换为短语查询。这仅在引号之间有多个术语(由空格、标点符号等分隔)时才有意义。例如,如果您的搜索字符串为Hello world,则它将匹配包含Hello或world的文档(如果您使用的是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 search中构造筛选器和搜索查询:


如果要执行精确匹配,为什么不尝试OData筛选器?在这种情况下,您的查询将变成$filter=DocumentType eq'Type'

请注意,如果您使用azure search的预览版本,api version=2015-02-28-preview,则他们已添加用于部分匹配的新过滤器

search.ismatchfiledvalue、fiedName和saerch.ismatchscoring

另外,您是否检查了自定义分析器?如果您知道您将始终在几个字段上执行精确匹配,那么使用关键字分析器和小写标记器


你好,布鲁斯,谢谢你的回答。我花了一段时间才弄清楚所有的选项,参数,设置等等。。。有很多组合:也很难区分C和RESTAPI搜索方法以及用于每种方法的选项。我最初尝试使用过滤器,但一直出现语法错误,所以最后我在搜索查询中添加了这个词和过滤器,正如我在上面添加的那样。我会再次尝试过滤器,看看是否能让它们发挥作用。大家好@Bruce,我刚刚意识到使用过滤器的一个问题是,对于搜索词,我不想将其缩小到某个特定字段,我想在所有字段中搜索该词。当用户输入搜索词时,我无法知道它适用于哪个字段。通过下拉列表,我可以指定特定字段,然后使用筛选器,但不能与搜索词一起使用。您可以在同一请求中同时使用筛选器和搜索。它们有效地结合在一起。使用搜索用户输入的术语,并使用过滤器作为固定类别或用户指定精确标准的其他字段的过滤器。@如果你觉得这个答案有用,请考虑将其标记为接受。谢谢你好@Brue谢谢你的更新。您说使用搜索用户输入的术语,但这仍然给我留下了最初的问题-搜索类型也将返回新类型和我的类型。