如何获得多字搜索的每个单词的结果计数没有结果

时间:2014-10-13 14:36:29

标签: solr

在我们的网上商店,我想实现一项应该执行以下操作的功能:

如果是用户,例如搜索“手机大图”,将没有结果。

如果没有结果我想让他有可能看到

  • 搜索“电话”会给他139条结果
  • 并搜索“magnum”将获得12个结果。

我不想仅为了获得这些计数而启动多个查询。但目前我不知道如何做到这一点。

我阅读了Solr-wiki的faceting,但没有发现任何对我的问题有用的东西。也许我错过了什么......

1 个答案:

答案 0 :(得分:0)

不确定为什么要避免多次查询。如果您对短语"phone magnum"的第一次搜索未返回任何结果,则您可以针对rows=0为每个搜索关键字发出一个查询,该查询仅为您提供计数。这应该是有效的,因为您没有构建任何结果文档并且只获得结果计数。

但是,如果您真的想要避免后续查询,那么这里有一个apporach:索引中有一个字段,不考虑IDF。 (请参阅this了解如何执行该操作。)一旦该字段可用(称之为name_no_idf),请针对此字段name_no_idf:(phone magnum)发出查询。请注意,这不是短语搜索。

phone字段中包含magnumname_no_idf的文档得分为2,而只匹配一个字的文档得分为1。查询您添加facet=true&facet.field=name。然后,你得到的这两个词的分数将是你正在寻找的计数。但很少有警告:

  1. 如果其中一个词非常罕见,您可能需要增加facet.limit
  2. facet查询很昂贵