web-dev-qa-db-fra.com

requête solr avec espace

Je recherche un mot et j'obtiens les résultats avec facette comme suit

<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>

alors j'ai écrit la condition commefq = itemtype: Factoryi obtenir les résultats. Mais je ne reçois pas les résultats pourfq = type d'élément: intermédiaires de la chaîne d'approvisionnement. Je pense au problème avec les espaces dans la condition (intermédiaires de chaîne d'approvisionnement), j'ai également essayé avec urlencode (espace remplace par% 20). Mais pas d'utilisation. Pouvez-vous m'aider, s'il vous plaît, à résoudre ce problème?.

Mettre à jour:

Pour une valeur unique, cela fonctionne bien. Je construis la requête comme ceci

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

Mais j'ai besoin d'écrire pour plusieurs valeurs. La requête originale avec out raw est la suivante

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

Pouvez-vous m'aider, s'il vous plaît, à résoudre ce problème?.

27
Brahmaji Rao

Comment votre champ itemtype est-il analysé?

Si c'est du type chaîne, alors utilisez:

fq=itemtype:"Supply Chain Intermediaries"

Sinon, vous pouvez aussi essayer:

fq=itemtype:(Supply Chain Intermediaries)

En supposant que OR est l'opérateur par défaut dans votre configuration et que text est le champ de recherche par défaut, votre requête sera traduite en:

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

La chaîne et les intermédiaires sont recherchés dans le champ de recherche par défaut.

33
Umar

J'ai essayé différentes solutions mentionnées ici, mais aucune d'entre elles n'a fonctionné. Cependant, je l'ai résolu comme ceci:

fq=itemtype: *Supply\ Chain\ Intermediaries*

Ici, l'espace sera échappé avec \ 

La chaîne ci-dessus correspond aux chaînes Lorem Supply Chain Intermediaries Ipsum

Si vous rencontrez un mot commence par Supply Chain Intermediaries Ipsum Puis donnez simplement 

fq=itemtype: Supply\ Chain\ Intermediaries*
14
Sri Harsha

Cela ne répond pas directement à cette question, mais cela peut aider à résoudre ce problème:

Supprimer les espaces avant de poster à Solr.

Pour les champs utilisés pour la création de facettes plutôt que pour la recherche, il n'est pas important de stocker la valeur avec des espaces. La valeur est simplement traitée comme une clé. Enregistrez le champ itemtype comme suit: "supplychainintermediaries", "monitorauditorfirm", etc. 

Lorsque vous affichez les valeurs de facette à l'utilisateur, utilisez simplement un dictionnaire qui mappe les valeurs de clé pour afficher les valeurs. Ainsi: 

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

2
James Lawruk

Je suppose que tu peux utiliser 

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

dans ce but

Il est évident que vous devez utiliser! Term au lieu de! Raw pour la version Solr> = 4.0

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

Bonne journée.

1
slhsen

J'ai corrigé le problème des espaces en remplaçant:

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

avec :

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

Signifie en ajoutant la citation après la valeur d'échappement dans le fichier SolrSource.php.