0

当用户输入的所有元素都被排除时(例如:用户输入是 -obama),我希望我的搜索工具具有与 Google 搜索类似的行为。在这些情况下,Google 会返回一个空结果。在我当前的代码中,我的程序只是进行了一个空的 Solr 查询,这会导致 Solr 出错。

我知道您可以输入 *:* 来获取所有结果,但是我应该填写什么 Solr 查询以便 Solr 返回一个空的搜索结果?

编辑:

为了更清楚,事情是当我有像 -obama 这样的东西时,我希望 Solr 返回一个空的搜索结果。如果你用谷歌搜索 -obama,这就是你得到的,但如果你把 -obama 放在 Solr 上,结果似乎是一切(所有文件),除了那些有“奥巴马”的文件

4

2 回答 2

0

当没有要查找的术语时,您不应该查询 solr(我严重怀疑谷歌会在搜索术语为空时查看它的可搜索索引)。在构建 solr 查询之前,应该将此逻辑构建到用于解析用户提供的查询术语的任何机制中。假设用户的输入被表示为一个简单的字符串,其中每个单词都被视为一个唯一的查询词。您可能希望将空格上的字符串拆分为字符串数组,映射数组并删除以“-”为前缀的字符串,然后从数组中剩余的内容构造查询词。如果展平数组产生一个空字符串,则返回一个空数组而不是查询 solr。

于 2014-08-07T23:27:32.910 回答
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>
于 2014-08-07T23:25:01.327 回答