我们有一个搜索屏幕,用户可以在其中输入短语,然后在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等放在搜索字符串中,但似乎没有任何影响。
理想情况下,我希望首先返回包含整个短语的行,然后是包含第一个单词的行,接着是包含第二个单词等的行。
如何更改代码以确保按指定顺序返回行?
答案 0 :(得分:0)
如果你正在使用完整的Lucene查询(我看到你已经启用了),你可以将词组匹配提高得比其他匹配要高得多,以达到你描述的效果。
以这种方式重写的查询将是:
search=("cause and healthcare")^100 (cause and healthcare)&queryType=full&searchMode=any
请注意,在您的示例中,您正在转义引号,您不需要转义它们(除非主机语言需要它,正如您在C#示例中正确执行它,但在URL级别您不应该因为它最终意味着别的东西)。这可能是造成.NET客户端和查询资源管理器之间差异的原因,也是导致增强操作员无法在测试中工作的原因。
如果你想做整个短语,然后是第一个单词后跟第二个单词等,那么使用强制来强制命令,例如:
("phrase")^100 firstword^25 secondword^10 ...