Brahmaji Rao
Brahmaji Rao

Reputation: 395

solr query with white space

I search for a word and I get the results with facet as follows:

<lst name="itemtype">
<int name="Internal">108</int>
<int name="Users">73</int>
<int name="Factory">18</int>
<int name="Supply Chain Intermediaries">6</int>
<int name="Company">1</int>
<int name="Monitor/Auditor firm">0</int>
</lst>

Then I wrote the condition like fq=itemtype:Factory. I get the results. But I am not getting the results for fq=itemtype:Supply Chain Intermediaries.
I am thinking the problem rests with the spaces in the condition (Supply Chain Intermediaries). I tried with urlencode (to replace spaces with %20) also. But it's of no use. Can you guys please help me to solve this?

Update:

For single value it is working fine. I build the query like this:

http:localhost:8080/solr/select/?q=adidas&version=2.2&indent=on&facet=on&start=0&rows=20&fq={!raw f=itemtype}Supply Chain Intermediaries

But i need to write for multiple values. The original Query with out raw is as follows

http://localhost/solr/select/?q=adidas&version=2.2&indent=on&facet=on&start=0&rows=20&fq=(itemtype:Company itemtype:Supply Chain Intermediaries)

Can you guys please help me to solve this.

Upvotes: 35

Views: 54847

Answers (5)

I have fixed white space issue by replacing :

$tmp[] = $name . ':' . $this->_escapeValue($value);

with :

$tmp[] = $name . ':' .'"'. $this->_escapeValue($value).'"';

Means by adding quotation after escape value in SolrSource.php file.

Upvotes: 0

Sri Harsha
Sri Harsha

Reputation: 310

I have tried different solutions mentioned here, but none of them worked. However I solved it like this:

fq=itemtype: *Supply\ Chain\ Intermediaries*

Here space will be escaped with \

The above string will match with the strings Lorem Supply Chain Intermediaries Ipsum

If you are having a word starts with Supply Chain Intermediaries Ipsum then just give

fq=itemtype: Supply\ Chain\ Intermediaries*

Upvotes: 21

Umar
Umar

Reputation: 2849

How is your itemtype field analysed?

If it is of type string , then use:

fq=itemtype:"Supply Chain Intermediaries"

Otherwise you can also try:

fq=itemtype:(Supply Chain Intermediaries)

Assuming OR is the default operator in your config and text is the default search field, your query will get translated to:

fq=itemtype:Supply OR text:(Chain Intermediaries)

Chain and Intermediaries are searched against default search field.

Upvotes: 45

James Lawruk
James Lawruk

Reputation: 31337

This doesn't answer this question directly but it may help with this problem:

Remove the spaces before posting to Solr.

For fields used for faceting rather than searching, it is not important to store the value with spaces. The value is simply a treated as key. Store the field itemtype like so:"supplychainintermediaries", "monitorauditorfirm", etc.

When you display the facet values to the user, simply use a dictionary which maps key values to display values. Like so:

"supplychainintermediaries" --> "Supply Chain Intermediaries" "monitorauditorfirm" --> "Monitor/Auditor Firm"

Upvotes: 2

slhsen
slhsen

Reputation: 616

I guess you can use

fq={!raw f=itemtype}Supply Chain Intermediaries

for that purpose

It tuns out that you have to use !term instead of !raw for Solr version >= 4.0

http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201012.mbox/%[email protected]%3E

Have a nice day.

Upvotes: 1

Related Questions