Solr Query not parsing forward slash

2019-02-16 14:00发布

问题:

Is the forward slash "/" a reserved character in solr field names?

I'm having trouble writing a solr sort query which will parse for fields containing a forward slash "/"

When making an http query to my solr server:

q=*&sort=normal+desc

Will work but

q=*&sort=with/slash+desc
q=*&sort=with%2Fslash+desc

Both fail say "can not use FieldCache on multivalued field: with"

Each solr document contains two int fields "normal", and "with/slash". With my solr schema indexing the fields as so

...
<field name="normal" type="int"   indexed="true" stored="true" required="false" />
<field name="with/slash" type="int"   indexed="true" stored="true" required="false" />
...

Is there any special way I need to encode forward slashes in solr? Or are there any other delimiter characters I can use? I'm already using '-' and "." for other purposes.

回答1:

I just came across the same problem, and after some experimentation found that if you have a forward-slash in the field name, you must escape it with a backslash in the Solr query (but note that you do not have to do this in the field list parameter, so a search looking for /my/field/name containing my_value is entered in the "q" field as:

\/my\/field\/name:my_value

I haven't tried the sort field, but try this and let us know :)

This is on Solr 4.0.0 alpha.



回答2:

From the solr wiki at https://wiki.apache.org/solr/SolrQuerySyntax :

Solr 4.0 added regular expression support, which means that '/' is now a special character and must be escaped if searching for literal forward slash.



回答3:

In my case I needed to search for forward slash / with wild card *, e.g.:

+(*/*)
+(*2016/17*)

I Tried to escape it like so:

+(*2016\/*)
+(*2016\/17*)

but that didn't work also.

the solution was to wrap the text with double quote " like do:

+("*\/*")
+("*/*")

+("*2016\/17*")
+("*2016/17*")

both returned the same result with and without escaping the forward slash



标签: lucene solr