如何让Solr返回空结果?

0 投票
2 回答
817 浏览
提问于 2025-04-18 16:28

我希望我的搜索工具在用户输入的所有元素被排除时,能像谷歌搜索那样工作(例如:用户输入 -obama)。在这种情况下,谷歌会返回空结果。而我现在的代码只是生成了一个空的 Solr 查询,这样会导致 Solr 出错。

我知道可以输入 *:* 来获取所有结果,但我应该在我的 Solr 查询中填什么,才能让 Solr 返回一个空的搜索结果呢?

编辑:

为了更清楚地说明,当我输入 -obama 时,我希望 Solr 返回一个空的搜索结果。如果你在谷歌上搜索 -obama,你会得到这样的结果,但如果你在 Solr 中输入 -obama,似乎结果是所有的文档,除了那些包含“obama”的文档。

2 个回答

0

如果你的查询看起来像下面这样,它对我来说会返回空结果:

solr/select/?q=-obama&qf=description&defType=dismax

这是因为它试图在没有搜索内容的情况下运行一个负查询,所以没有返回任何结果。

这是我得到的回应:

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
<lst name="params">
<str name="q">-obama</str>
<str name="qf">description</str>
<str name="defType">dismax</str>
</lst>
</lst>
<result name="response" numFound="0" start="0"/>
</response>
0

当没有要查找的关键词时,你不应该去查询solr(我也很怀疑谷歌在搜索时会查看空的搜索词)。这个逻辑应该在你处理用户输入的查询词时就考虑进去,也就是在构建solr查询之前。假设用户输入的是一个简单的字符串,每个单词都被当作一个独立的查询词。你需要把这个字符串按空格分开,变成一个字符串数组,然后遍历这个数组,去掉那些以“-”开头的字符串,最后从剩下的字符串中构建查询词。如果处理后的数组是空的,那就返回一个空数组,而不是去查询solr。

撰写回答