Is it possible to retrieve the field name(s) that matched the query in Solr?

允我心安 提交于 2020-02-03 05:24:12

问题


I would like to dynamically show to the user which field matched the query that was sent to Solr. For example, if I had a document

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

and i queried for "yay", would it be possible for me to know that yay was found in field1 and dynamic_field_hurr_one?

I feel like I've been through the whole documentation, and thought I should use highlighting for this, but I can't get it to work on dynamic fields. On normal fields it works fine!

A little background: I'm using Solr.Net and in the class I map to my document I have a IDictionary<string, string> to dynamically add additional information. After some reading up, I figured dictionaries mapped to dynamicfields, and it works perfectly, except for highlighting.

I also tried copying all data from my dynamic field into a text field, but I don't think there's a way to copy the "actual field name"? I can only get Solr to copy the value, which I guess makes sense.

Any ideas?


回答1:


There is an indirect way of doing this using a very interesting tool , hit highlighting.

Do this with default solr schema to understand solution:

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

Look at :

<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>

So , here you have the is the field that matched. You can choose to ignore rest of the actual highlighting part and use only the field names that matched for your purpose.

So you would ask for something like this in your case &hl=on&hl.fl=dynamic_field_hurr_one,dynamic_field_hurr_two




回答2:


just for completeness, there is another way to get this info without using highlighting (highlighting imposes some conditions such as forcing stored fields)

  1. add debugQuery=true to your query
  2. get /response/debug/explain info
  3. parse it, to find out in what field it matched. Using debug.explain.structured=true changes the format of the element, it might be easier to parse


来源:https://stackoverflow.com/questions/20252443/is-it-possible-to-retrieve-the-field-names-that-matched-the-query-in-solr

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!