【问题标题】:Is it possible to retrieve the field name(s) that matched the query in Solr?是否可以检索与 Solr 中的查询匹配的字段名称?
【发布时间】:2013-12-13 16:24:27
【问题描述】:

我想动态地向用户显示哪个字段与发送到 Solr 的查询匹配。例如,如果我有一个文档

document
  field1: "yay"
  field2: "nay"
  dynamic_field_hurr_*:
    one: "yay"
    two: "nay"

我查询了“yay”,我是否可以知道在 field1 和 dynamic_field_hurr_one 中找到了 yay?

我觉得我已经阅读了整个文档,并认为我应该为此使用突出显示,但我无法让它在动态字段上工作。在普通领域它工作正常!

一点背景知识:我正在使用 Solr.Net,在我映射到我的文档的课程中,我有一个 IDictionary<string, string> 来动态添加其他信息。经过一番阅读,我发现字典映射到动态字段,它工作得很好,除了突出显示。

我还尝试将动态字段中的所有数据复制到文本字段中,但我认为没有办法复制“实际字段名称”?我只能让 Solr 复制该值,我认为这是有道理的。

有什么想法吗?

【问题讨论】:

  • 我们对 动态字段 使用相同的方法以及 @arun 提到的 copyFields,它按预期工作。如果这不适用于您的情况,请提供其他信息,例如:solr 版本突出显示选项 等。
  • 事实上,您不能对动态字段使用高亮显示,但您可以使用 Field API 将动态字段转换为显式字段,以便使用此功能。看this,这是LucidWorks的一个选项
  • @Osy 当然可以……如果您明确将它们定义为 edismax 搜索字段(用于搜索)和 hl 字段用于突出显示。
  • 关于这个案例我可以说的最后一点,没有更多细节 - 确保这些动态字段已存储,因为没有它突出显示将无法工作 - @987654322 @.

标签: solr solrnet


【解决方案1】:

有一种间接的方法可以使用一个非常有趣的工具,点击突出显示。

使用默认的 solr 架构执行此操作以了解解决方案:

http://localhost:8983/solr/collection1/select?q=iPod&wt=xml&indent=true&hl=on&hl.fl=name,description

看看:

<lst name="highlighting">
<lst name="IW-02">
<arr name="name">
<str><em>iPod</em> & <em>iPod</em> Mini USB 2.0 Cable</str>
</arr>
</lst>
<lst name="F8V7067-APL-KIT">
<arr name="name">
<str>Belkin Mobile Power Cord for <em>iPod</em> w/ Dock</str>
</arr>
</lst>
<lst name="MA147LL/A">
<arr name="name">
<str>
Apple 60 GB <em>iPod</em> with Video Playback Black
</str>
</arr>
</lst>
</lst>

所以,这里有匹配的字段。您可以选择忽略实际突出显示部分的其余部分,仅使用与您的目的匹配的字段名称。

所以你会在你的情况下要求这样的东西&amp;hl=on&amp;hl.fl=dynamic_field_hurr_one,dynamic_field_hurr_two

【讨论】:

  • 对不起,不,不认为这行得通。在你的例子中,当然,但这些不是动态字段。我在自己的应用程序中尝试过(实际上,你建议的就是我开始使用的),动态字段的突出显示根本不显示..
  • @Arun 的解决方案似乎工作除了 fl 参数使用 * 像 hl.fl=*
  • 不太确定这是不是正确的答案,但就是这样,我没有时间更彻底地检查它。奖励赏金:)
【解决方案2】:

为了完整起见,还有另一种方法可以在不使用突出显示的情况下获取此信息(突出显示会施加一些条件,例如强制存储字段)

  1. 将 debugQuery=true 添加到您的查询中
  2. 获取 /response/debug/explain 信息
  3. 解析它,找出它匹配的字段。使用 debug.explain.structured=true 改变元素的格式,它可能更容易解析

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-29
    • 2015-04-30
    • 2018-03-08
    • 2014-11-30
    • 2015-02-17
    • 2010-09-20
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多