Azure搜索顺序

时间:2018-02-21 16:36:29

标签: azure-search azure-sdk-.net

我们有一个搜索屏幕,用户可以在其中输入短语,然后在Azure中搜索包含短语或短语的任何单词的行。他们想要查看包含整个短语的行排序的结果,然后是包含构成短语的任何或所有单词的行。

这是我在门户网站的搜索资源管理器中测试的搜索字符串:

search="\"cause and healthcare\"" cause and healthcare&queryType=full&searchMode=any

因此,在此示例中,他们希望首先看到包含短语“cause and healthcare”的行,然后是包含任何/所有“cause”“和”“healthcare”的行

当我在Azure门户网站的搜索资源管理器中运行上述查询时,“似乎”返回的行首先是整个短语,然后是其他没有特定顺序的行。但是当我从dotNet运行时,我得到了一个不同的顺序:

       SearchParameters parameters = new SearchParameters()
        {
            Filter = newFilter,
            QueryType =  QueryType.Full,
            Top = recordsPerPage,
            Skip = skip,
            SearchMode = SearchMode.Any,
            IncludeTotalResultCount = true
        };
        query = string.Format("\"{0}\" {0}", query);

我已经在搜索浏览器中查看了术语提升,将^ 2,^ 4等放在搜索字符串中,但似乎没有任何影响。

理想情况下,我希望首先返回包含整个短语的行,然后是包含第一个单词的行,接着是包含第二个单词等的行。

如何更改代码以确保按指定顺序返回行?

1 个答案:

答案 0 :(得分:0)

如果你正在使用完整的Lucene查询(我看到你已经启用了),你可以将词组匹配提高得比其他匹配要高得多,以达到你描述的效果。

以这种方式重写的查询将是:

search=("cause and healthcare")^100 (cause and healthcare)&queryType=full&searchMode=any

请注意,在您的示例中,您正在转义引号,您不需要转义它们(除非主机语言需要它,正如您在C#示例中正确执行它,但在URL级别您不应该因为它最终意味着别的东西)。这可能是造成.NET客户端和查询资源管理器之间差异的原因,也是导致增强操作员无法在测试中工作的原因。

如果你想做整个短语,然后是第一个单词后跟第二个单词等,那么使用强制来强制命令,例如:

("phrase")^100 firstword^25 secondword^10 ...