【问题标题】:Searching all solr fields for value搜索所有 solr 字段的值
【发布时间】:2016-12-19 14:07:39
【问题描述】:

我想在 solr 中的所有字段中搜索某个值。如果我搜索 title:six 我会收到我的结果,但是如果我搜索 *:six 我不会。我有一个 all 字段,它收集有关所有已索引字段的信息,所以如果我搜索 all:six 我也会得到我的结果,但是我想专门搜索 *:six

在 schema.xml 中,我注意到了一个指令 <copyField source="*" dest="all" />,但我认为这两种方式都不起作用(好吧 - 如果我保留它,或者删除它,什么都不会改变)

有没有办法完成我所追求的?

【问题讨论】:

  • @Mun - 请告诉我这个问题如何回答我的问题?
  • 刚刚重新阅读您的问题并注意到您已经有一个“全部”字段。我不认为你可以使用你正在寻找的特定语法,但如果这是你想要允许用户输入的东西,你可能需要考虑将它的服务器端从 "*:six" 转换为 "all:six"并将后者发送到 Solr。
  • @Mun - 好吧,atm 我只是在搜索six,并且当all 被索引时,它就可以工作了。问题是,查看架构(不是我的),预计 *:six 应该可以工作,我想准备好回答这个问题 1)它不可能工作 2)它不能作为*:six 并按照 all:sixsix 进行操作就可以了

标签: solr


【解决方案1】:

搜索 *:six 不是合法语法,永远不会作为全局搜索。它很可能会解析为实际文本,并改为搜索该关键字的默认字段。如果默认字段(由 df 参数定义,很可能是 all)进行标准标记化,它将在冒号上拆分并在该默认值中搜索 '*' 和 'six'场地。

因此,它可能一直是对 Solr 语法的误解,并且可能随时损坏。如果该配置仍在运行,则启用调试标志将准确显示如何解析查询以及搜索查询的字段。这就是你需要的所有证据。

正确的方法是您拥有的 copyField 并将字段 all 声明为默认搜索字段。这就是随 Solr 提供的开箱即用示例的方式。

【讨论】:

  • 非常好,将<str name="df">all</str> 添加到solrconfig.xml 的默认值确实解决了这个问题。我认为你是对的 - 我在 debugQuery 中没有看到 *,但它可能已被丢弃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
相关资源
最近更新 更多