所以我是新来的Azure搜索,我只是开始弄清楚。我有一个搜索索引,查询匹配记录的一个非常简单的SQL视图。我正在为搜索的单词找到完全匹配的麻烦。从azure搜索返回的记录仅匹配确切的serch字词
每当我搜索我得到的记录只有确切的单词..但是我也得到包含搜索的单词例如我搜索“类型”,我得到“新类型”和“我的类型”的记录。我在搜索时将双引号括起来。
我使用C#SDK,当我通过邮差执行搜索,还发生了:
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")
嗨@Bruce感谢您的回答。我花了一段时间才弄清楚所有的选项,参数,设置等...有很多组合:)这很难区分C#和rest api搜索方法以及每种方法的选项。我最初尝试使用过滤器,但不断收到语法错误,因此最终我将术语和过滤器转换为搜索查询,就像我上面添加的那样。我会再次尝试过滤器,看看我能否让他们工作。 –
嗨@布鲁斯,我刚刚使用过滤器实现的一个问题是,对于搜索术语,我不想将其缩小到特定字段 - 我想在所有字段中搜索术语。当用户输入搜索词时,我无法知道它适用于哪个字段。随着下拉,我可以指定特定的字段,然后使用过滤器,但不与搜索词。 –
您可以在同一请求中一起使用过滤器和搜索。它们被有效地联合在一起。使用搜索由用户输入的术语,并使用过滤器来查看固定类别或用户指定准确标准的其他字段。 –