2

我正在尝试理解 solr 嵌套查询,但我遇到了语法问题。

我有以下两个索引文档(其中包括):

<doc>
    <str name="city">Guarulhos</str>
    <str name="name">Fulano Silva</str>
</doc>

<doc>
    <str name="city">Fortaleza</str>
    <str name="name">Fulano Cardoso Silva</str>
</doc>

如果我查询q="Fulano Silva"~2&defType=edismax&qf=name&fl=score我有:

<doc>
    <float name="score">28.038431</float>
    <str name="city">Guarulhos</str>
    <str name="name">Fulano Silva</str>
</doc>

<doc>
    <float name="score">19.826164</float>
    <str name="city">Fortaleza</str>
    <str name="name">Fulano Cardoso Silva</str>
</doc>

所以我想如果我查询:

q="Fulano Silva"~2 AND __query__="{!edismax qf=city}fortaleza" &defType=edismax&qf=name&fl=score

我会为第二个文档打更多的分数,但实际上我得到了一个 numFound=0 的空结果集。

我在这里做错了什么?

4

3 回答 3

1

需要删除“=”并将其替换为“:”以使用嵌套查询语法:

q="Fulano Silva"~2 AND _query_: "{!edismax qf=city}fortaleza" &defType=edismax&qf=name&fl=score

*使用_query_:而不是_query_=

希望这有效...

于 2013-08-23T05:45:10.740 回答
0

编辑:当您说时 q=您是在 URL 中指定查询,还是将文本 q= 放入应用程序或 Solr 仪表板后?如果我们谈论的是 URL,您可能需要使用百分比编码来使其工作。我在下面提到了这一点,但由于我没有收到您的来信,我想我会重申一下。

你为什么不做q=name:"Fulano Silva" AND city:"fortaleza"

另一种可能:q=_query_:"{!edismax qf='name'}Fulano Silva" AND city:"fortaleza"

如果您设置在嵌套查询上,select?defType=edismax&q="Fulano Silva" AND _query_:"{!edismax qf='city' v='fortaleza'}"应该可以工作,但结果及其匹配方式将取决于您用于查询和索引的分析器namecity. 此外,如果这些查询在您的查询字符串中,请确保您 正确编码它们。

为了进一步帮助您,我需要知道您要通过查询完成什么。那么也许我们可以确定您设置了正确的索引,edismax 是正确的查询处理程序,等等。

于 2013-11-03T05:03:11.880 回答
0

在前面的评论之上,提问者拼错_query___query__(注意第二个拼写错误的版本中的双下划线);Solr 期望在单词 query 之前和之后_query_只用一个下划线 ( ) 拼写,而不是两个。_

于 2017-09-16T22:04:54.793 回答