Solr查询结果使用*

时间:2010-04-07 19:48:29

标签: solr

我想提供部分匹配,所以我在*搜索查询的末尾。我注意到,gatorade的搜索查询将返回12个结果,而gatorade *返回7.所以*似乎是1或许多而不是0或许多......我怎样才能实现这一点?我在索尔的部分匹配是否都错了?感谢。

6 个答案:

答案 0 :(得分:7)

首先,我认为Solr通配符更好地概括为“0或许多”而不是“1或许多”。我怀疑这是你问题的根源。 (例如,请参阅the javadocs for WildcardQuery。)

第二,你是否正在使用词干,因为我的第一个猜测是你正在处理一个词干问题。 Solr通配符可以表现出奇怪的干扰。这是因为通配符扩展的基础是搜索存储在倒排索引中的术语列表;这些术语将采用词干形式(可能类似于“gatorad”),而不是原始源文本中的词语(可能是“gatorade”或“gatorades”)。

例如,假设您有一个将“g​​atorade”和“gatorades”映射到词干“gatorad”的词干分析器。这意味着您的倒排索引不包含“gatorade”或“gatorades”,只包含“gatorad”。如果您随后发出查询 gatorade * ,Solr将遍历术语索引,查找以“gatorade”开头的所有词干。但是没有这样的词干,所以你不会得到任何比赛。同样,如果您搜索 gatorades * ,Solr将查找以“gatorades”开头的所有词干。但是没有这样的词干,所以你不会得到任何匹配。

第三,为了获得最佳帮助,我建议发布更多信息,特别是:

  • 您要提交给Solr的一些特定查询网址
  • 您的schema.xml文件的摘录。特别是,包括A)您遇到问题的字段的字段元素,以及B)与这些字段对应的字段类型定义

答案 1 :(得分:2)

所以我想要的是为'gatorade'制作搜索词 - > 'gatorade OR gatorade *'将为我提供我正在寻找的所有比赛。

答案 2 :(得分:2)

如果您希望查询返回所有与gatorade的词干形式或以gatorade开头的词匹配的文档,则需要自己构造查询:+(gatorade gatorade *)。你可以选择扩展SolrParser来做到这一点,但这样做更多。

答案 3 :(得分:1)

另一种选择是使用NGrams和TokenFilterFactories, specifically the EdgeNGramFilterFactory。

这将为ngrams或部分单词创建索引。最小ngram大小为5,最大ngram大小为8的文档将索引:Docum Docume文档文档

索引大小和时间有一点折衷。其中一本Solr书籍引用作为粗略指南:索引需要10倍的时间使用5倍的磁盘空间创建6倍的不同术语。

然而,EdgeNGram会做得更好。

您确实需要确保在查询中不提交通配符。由于您没有进行通配符搜索,因此您在ngrams(单词部分)上匹配搜索词。

答案 4 :(得分:1)

我的猜测是缺少的比赛是" Gatorade" (使用大写' G'),你的字段上有一个小写过滤器。想法是你在schema.xml中有过滤器来预处理输入数据,但是通配符查询不使用它们; 看看Solr如何处理通配符查询:

http://solr.pl/en/2010/12/20/wildcard-queries-and-how-solr-handles-them/ (" Solr和通配符处理")。

答案 5 :(得分:0)

根据我读过的通配符,在搜索字词后只匹配带有其他字符的字词。 "佳得乐*"会匹配Gatorades而不是Gatorade本身。它似乎是版本3.6中对Solr的更新,通过使用' multiterm'字段类型而不是'文本'字段。

更好的描述如下:

http://bensch.be/the-solr-wildcard-problem-and-multiterm-solution

相关问题