How to perform a search in a Multivalued Field in Solr?
-
19-06-2021 - |
Question
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
Solution
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.
OTHER TIPS
Try something like this:
series:("The Walking Dead" OR "Game of Thrones")
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
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
I think your the actual problem is using OR
as lowercase. When you do something like that, The or
value is searched in defaultTextField
. Also don't forget to put quotes if there's a whitespace in your query - and you're looking for an exact match.