【问题标题】:Solr: exclude only-number matchesSolr:排除仅数字匹配
【发布时间】:2013-01-23 17:06:44
【问题描述】:

我搜索游戏“质量效应 2”

http://localhost:8085/solr/select/?defType=edismax&qf=title&q=Mass+Effect+2&mm=1

除了“质量效应 2”和“决战效应”之外,它还可以找到诸如“无主之地 2”、“原型 2”和其他名称中带有“2”的游戏。所以我想排除仅与“2”匹配的文档。

title字段定义为:

<field name="title" type="text" indexed="true" stored="true" multiValued="false" />

【问题讨论】:

  • schema.xml 中的“title”字段是如何定义的?
  • 我认为 Max 的意思是字段定义和字段类型定义。 FieldType 告诉您如何将文本分解为标记。

标签: solr edismax


【解决方案1】:

这不是一个确切的答案,而是一个简单的答案,可能适合您的情况。您可以使用 minimum should match 参数和 edismax 查询解析器,因此如果您的查询中有一个数字,您可以增加该数字并使用 2 例如。

http://wiki.apache.org/solr/DisMaxQParserPlugin#mm_.28Minimum_.27Should.27_Match.29

考虑到不是仅排除数字,而是可以将用例告知为“仅使用参数进行提升”,您可以重写查询并使用嵌套的分数。 如所写:http://searchhub.org/2009/03/31/nested-queries-in-solr 你的查询可以写成

 text:Mass Effect OR query:"{!dismax mm=2 }Mass effect 2"

这个想法是在没有数字的情况下进行查询,并将数字作为嵌套查询包含在内以增加数字

【讨论】:

  • 考虑这个查询:“质量效应 2”。根据您的回答,我应该设置 mm=2。然后 solr 找不到“摊牌效应”,因为没有术语“2”或“质量”。所以基本上我需要 solr 只考虑单词,而不是数字。还是谢谢
  • 这就是为什么我说它可能没问题,也许如果不需要这个数字,为​​什么要包含在搜索中?您可以忽略它,仅使用“质量效应”进行搜索会产生预期的结果。有时换个角度会更容易,在哪些情况下你想考虑这个数字?
  • 我在数据库中有“质量效应”、“质量效应 2”和“质量效应 3”。我首先想成为“质量效应2”。如果我从搜索查询中删除数字,“质量效应”是最佳匹配。我不需要这个数字单独,但只有当它与查询中的其他单词一起出现时。
  • 好吧,在这种情况下,您可以使用一些嵌套查询,searchhub.org/2009/03/31/nested-queries-in-solr 类似:text:Mass Effect OR query:"{!dismax mm=2 }Mass effect 2" 它没有经过测试,但它的想法是在没有数字的情况下进行查询,并将数字作为嵌套查询包含在内以增加数字。
  • 是的,子查询是我真正需要的!谢谢你。你能更新你的答案吗?
【解决方案2】:

“pf”词组提升而不是引用词组搜索会给您带来更好的结果吗?它表示所有元素都在附近,不一定是相同的顺序。

【讨论】:

  • pf 提升了这些文档,但它不会减少不相关的文档。不相关是指仅包含来自查询的一位数字的文档。我尝试按分数进行过滤,但是当使用“pf”时,文件“Mass Destruction”和“Borderlands 2”的分数大致相同
猜你喜欢
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2015-12-03
  • 1970-01-01
相关资源
最近更新 更多