Solr Query not parsing forward slash
Asked Answered
H

4

11

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.

Hyperparathyroidism answered 29/8, 2011 at 6:16 Comment(6)
For escaping characters, please check out https://mcmap.net/q/1019116/-solr-sanitizing-query for escaping Solr characters and scroll to the bottom of wiki.apache.org/solr/SolrQuerySyntax for how to compose URLs . Hope this helpsTallyman
Thanks for the links, however the "/" character is not in the list of suspect solr characters, and my URL encoding is not a problem. FYI, I've decided to work around this problem by replacing / with _ in my field names.Hyperparathyroidism
Doh! I just ran into the same problem. / isn't in the list I checked for special characters either. I've tried encoding, quotes, etc. No luck for me either =(Contuse
Can it be that you are using a tokenizer wich splits the index on a / try to use the solr.StrField in the schema.xmlDorsey
The problem seems to be that Solr is treating your string as a regex when a forward slash is found: #17798800 ; escaping with slashes, as @tw123 suggested, should solve your problem.Nepheline
#16657652Khasi
H
6

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.

Hulen answered 18/7, 2012 at 21:25 Comment(0)
D
4

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.

Disentitle answered 15/1, 2016 at 9:38 Comment(1)
Nice, thanks for the info. Prior to 4.0, the characters that needed escaping were + - && || ! ( ) { } [ ] ^ " ~ * ? : \. The forward slash wasn't one of them. It is now, though.Dardar
M
0

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

Marmoreal answered 28/8, 2017 at 12:53 Comment(0)
V
0

In my case I was using Solr Admin UI to run queries I had to search for a URL with a forward slash.

text:www.myurl.com/test => returned unwanted results text:"www.myurl.com/test" => returned desired results.

For your implementation of Solr Search indexing, enclosing the search string in quotes if you're using Solr Admin UI would be sufficient.

Vernavernacular answered 4/4, 2023 at 16:44 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.