是否可以让文档匹配特定字段的任何查询?

时间:2014-07-21 16:14:23

标签: solr lucene

在Solr中,可以使用field:*等查询查询某个字段中的任何值。我希望能够执行相反的操作,以便我可以向文档(*)添加一个值,使其与该字段上的任何查询匹配。

例如,以下文件:

{
    "a": 1,
    "b": *,
    "c": *
}

应该匹配这些查询:

  • b:5
  • b:[9 TO 11]
  • a:1
  • c:foo

但不是这些查询:

  • a:4

我想这样做的原因是,无论何时用户搜索a:1,无论指定了什么其他条件,都将匹配文档。我可以通过编辑查询来实现这一点,但不愿意。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

这是一个奇怪的请求。实际上你想要的是使某个字段与这种逻辑一样无用,这个字段的任何数据都变得无关紧要(因为无论什么是持久的,查询都会匹配它)。无论如何,这应该是可能的。

在Lucene,您可以执行以下操作:

  • 创建任何文档时,为字段b添加一些静态插件,例如将值设置为MatchAllValuesNoMatterWhatTheWeatherIs
  • 实现您自己的查询类并覆盖public Query rewrite(IndexReader reader)方法
  • 重写的方法会将b(如果存在)的查询字词更改为b:MatchAllValuesNoMatterWhatTheWeatherIs。其他条款应保持不变。

答案 1 :(得分:0)

您可以使用Solr switch语句(referenceexample)执行类似的操作。您将条件传递给与标准Solr不同的变量,然后打开该变量中的值/存在/不存在。

我将其用于advanced multi-field search并且不使用实际值,只是存在或不存在值作为触发Solr条件的方法。