是否可以检索与Solr中的查询匹配的字段名称?

时间:2013-11-27 20:24:43

标签: solr solrnet

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

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

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

我觉得我已经浏览了整个文档,并认为我应该使用突出显示,但我不能让它在动态字段上工作。在正常的字段上它工作正常!

一点背景:我正在使用Solr.Net,在课堂上我映射到我的文档,我有一个IDictionary<string, string>来动态添加其他信息。经过一些阅读后,我认为字典映射到动态字段,除了突出显示外,它完美地运行。

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

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

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

使用默认的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>

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

所以你会在你的案例&hl=on&hl.fl=dynamic_field_hurr_one,dynamic_field_hurr_two

中要求这样的事情

答案 1 :(得分:3)

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

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