How to perform a search in a Multivalued Field in Solr?
Solution 1
In addition to @user1452132 's answer -
When you are searching q=series:The Walking Dead
, only the
is searched across the series field while the walking dead
is search across the default search field.
The query formed would be series:the OR text:(Walking Dead)
You can debug the Query using the debugQuery=on in your request url.
You can use Dismax query handler to make it more manageable.
Solution 2
Try something like this:
series:("The Walking Dead" OR "Game of Thrones")
Solution 3
Use in fq
parameter (filter query),
E.g
name:("Java" OR "Python")
name:("Java" AND "Web")
// multivalued fields
author_ids:(1733 OR 58)
author_ids:(1733 AND 58)
Solr url encoding:
- ':' become '%3A'
- space become '+'
Thus, you might get a url like this:
http://localhost:8983/solr/xxx/select?q=programming&fq=title%3A("Java"+AND+"web")&wt=json&indent=true&defType=edismax&qf=title&stopwords=true&lowercaseOperators=true
Solution 4
Depending on what the intent of the search is try the following two searches
series:"The Walking Dead" OR series:"Game of Thorns"
series:(The Walking Dead) OR series:(Game of Thorns)
Please read solr query syntax and the underlying Lucene query syntax
Thiago
Updated on July 09, 2022Comments
-
Thiago almost 2 years
I'm having dificulties to execute a search in Solr. My Solr has a Multivalued field like this document below:
<int name="id">2166324592435</int> ...others fields <arr name="Series"> <str>The Walking Dead<\str> <str>Game of Thrones<\str> <\arr>
The Multivalued field Series has the Tv serie which the document references. In the example above, my document says about The Walking Dead and Game of Thrones. I can have documents with one, two or more series or even no series.
What I want to do is search in Solr. I want to give the series that I want and Solr should returns the documents that says about my query. I tryed but I couldn't do it. I tryed the following:
q=series:The Walking Dead or series:Game of Thrones or ...&wt=json
I think I'm doing wrong. What's the correctly way to do it?
Thanks in advance
Thiago