【问题标题】:How do I make Solr return an empty result?如何让 Solr 返回一个空结果?
【发布时间】:2014-08-07 22:18:12
【问题描述】:

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

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

编辑:

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

【问题讨论】:

  • 您仍然想念“为什么”要这样做。这种需求有多普遍(只是 -obama?或 -bush 也是如此?-randomGarbageString 呢?)。

标签: python solr lucene solr-query-syntax


【解决方案1】:

如果您的查询如下所示,它会为我返回空结果:

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>

【讨论】:

  • 我明白了。有没有办法在 q 中输入具有相同效果的内容? (而不是将 typeDef 设置为 dismax)
【解决方案2】:

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

【讨论】:

  • 是的,我对我的问题进行了编辑以使其更清晰
  • 如果您在运行查询之前解析出所有以“-”为前缀的术语,即使将 q 参数设置为空字符串,您也会得到您想要的结果。您使用的是什么请求处理程序?如果它是选择,如果你使用这样的网址,这将起作用:/select?wt=json&indent=true&q=
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多