所以,我是新来的Azure的搜索,我才刚刚开始弄明白。 我有一个查询匹配记录一个非常简单的SQL视图搜索索引。 我在大麻烦,因为我搜索的单词完全匹配。
每当我搜索我得到的记录与确切的词只。但是我也得包含搜索词例如我搜索“类型”和我的“新类型”和“我喜欢的类型”的记载。 我封闭“类型”在双引号当我搜索。
我使用的是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")
括在双引号中查询其变为短语查询。 这是如果有引号,用空格,标点符号等。例如分离之间不止一个学期的,如果你的搜索字符串是唯一有意义的Hello world
,这将匹配包含“你好”文档或“世界”(如果你”重新使用默认的searchMode
的any
假设你不使用任何其他运营商明确),但如果你的搜索字符串是"Hello world"
,然后文件只有在两个条件是彼此相邻的匹配。
看着你的查询,我猜你想通过分类数据进行过滤。 如果你真的想完全匹配(区分大小写),那么你应该使用$过滤器,而不是搜索:
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搜索
你为什么不尝试OData的过滤器,如果你想进行精确匹配? 在这种情况下,您的查询就会成为$过滤= DocumentType EQ“类型”
请注意,如果你蔚蓝搜索的预览版本,API版本= 2015年2月28日 - 预览,他们已经增加了新的过滤器部分匹配。
search.ismatch( “filedvalue”, “fieddname”)和saerch.ismatchscoring()
另外,你检查了自定义分析? 如果你知道你将永远在几个领域进行精确匹配,然后使用“关键字”分析与小写tokeniser
https://docs.microsoft.com/en-us/rest/api/searchservice/custom-analyzers-in-azure-search