Comment avoir Solr la saisie semi-automatique sur l'ensemble de la phrase lorsque la requête contient plusieurs termes?
J'ai regardé à travers une tonne d'exemples et d'autres questions ici et à partir d'eux, j'ai ma config très proche de ce dont j'ai besoin, mais je suis en manque un petit peu que je vais avoir un diable de temps de travail. Je suis à la recherche sur des valeurs comme:
solar powered
solar glass
solar globe
solar lights
solar magic
solid brass
solid copper
Ce que je veux:
- Si je recherche pour
sol
le résultat devrait inclure l'ensemble de ces valeurs. Les travaux de cette. - Si je recherche pour
solar
je devrais obtenir seulement les cinq premiers. Les travaux de cette. - Si je recherche pour
solar gl
je devrais obtenir seulementsolar glass
etsolar globe
. Cela ne fonctionne pas. Au lieu de cela, j'ai obtenu une série de matches pour lessolar
et une deuxième série de matches pour lesgl
.
En un mot, je veux tenir compte de la contribution de la chaîne dans son ensemble, indépendamment de n'importe quel espace. Je déduis ceci est accompli par la création d'une requête distincte (par rapport à l'indice) de l'analyseur, mais je n'ai pas été capable de le faire fonctionner. Quelqu'un peut-il suggérer une configuration qui vous permettra d'obtenir de moi ce que je suis à la recherche d'?
J'ai (sans succès) essayé:
- L'interrogation avec
"solar gl"
- L'interrogation avec
mm=100%
- Définition distincte de la requête et de l'indice des analyseurs à la fois à l'aide de KeywordTokenizerFactory. (Je ne sais pas ce que le diable je pensais que serait faire).
- La définition d'un indice de l'analyseur, mais pas un analyseur de requêtes.
- La définition d'un analyseur de requêtes sans tokenizer.
Voici mon schéma actuel:
<field name="suggest_phrase" type="suggest_phrase"
indexed="true" stored="false" multiValued="false" />
Et la définition d'un champ:
<fieldType name="suggest_phrase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
Et la config:
<searchComponent name="suggest_phrase" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<str name="name">suggest_phrase</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookup</str>
<str name="field">suggest_phrase</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest_phrase">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest_phrase</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.collate">false</str>
</lst>
<arr name="components">
<str>suggest_phrase</str>
</arr>
</requestHandler>
Ajouter le
shingle filter
à votre type de champ Bardeaux Filtre fieldType.Ok, juste essayé, mais ça ne me donne pas ce que je cherche. Si j'ai une requête pour
green coffee
j'ai toujours revenir à deux sets de matchs, l'un pour le mot green
et une autre pour le mot coffee
. (Ces match individuel définit ensuite contenir les "galets".) Ce que je suis à la recherche pour obtenir une liste uniquement les documents qui contiennent l'expression exacte green<space>coffee
et pas "green" OR "coffee"
.OriginalL'auteur Alex Howansky | 2013-08-08
Vous devez vous connecter pour publier un commentaire.
Trouvé la réponse, enfin! Je savais que j'étais vraiment très proche. S'avère ma configuration ci-dessus est correcte, et j'ai tout simplement besoin de changer ma requête.
KeywordTokenizerFactory
de sorte que les chaînes de caractères indexés dans son ensemble.SpellCheckComponent
pour le gestionnaire de requêtes.q=<string>
mais avecspellcheck.q=<string>
.La source des chaînes indiqué ci-dessus et une requête de
spellcheck.q=solar+gl
ce produit les résultats souhaités:Je vais recevoir les chaînes qui commencent par verre: verre propre, bouteille en verre, fenêtre en verre.
La version de Solr utilisez-vous et avez-vous l'esprit annonce de la schema.xml et solrconfig.xml? Merci.
Cela a été utilisé avec succès avec v4.4 et v4.5. Le schéma et les config sont actuellement comme indiqué dans le post original. Je n'avais qu'à changer de chaîne de requête de l'obtenir pour fonctionner.
merci ! il a beaucoup aidé. une question: est-il possible de faire une recherche pour vérifier l'orthographe.q=gla et obtenez le résultat que l'énergie solaire en verre
OriginalL'auteur
J'ai essayé plusieurs fois et j'en suis venu à la conclusion que n'est pas possible de sortir de la boîte.
J'ai trouvé une solution de contournement pour que:
Je indexé les données ajout de sopecial caractères entre chaque mot, de sorte qu'ils ne seraient pas sous forme de jeton.
Par exemple:
puis lorsque vous composez votre requête, vous assurez-vous que vous ajoutez la même quantité de caractères entre les deux mots que vous tapez, par exemple
solr gl
devenirsolarzzzzzzgl
.Cela permettra d'obtenir le comportement que vous demandez.
Une autre option serait de ne pas utiliser l'autosuggestion et à rendre un champ personnalisé pour vous-même, mais vous aurez à gérer la recherche de génériques et tous l'indexation par vous-même et n'est pas trop commode, en termes de temps et de performance.
Salut Maurizio, ping-vous donc, vous voyez ma réponse ci-dessus -- enfin réussi à le faire fonctionner et pensé que vous seriez intéressés par le résultat. Des acclamations.
OriginalL'auteur
Vous pouvez utiliser le
AnalyzingInfixLookupFactory
ouFreeTextLookupFactory
Plus de détails et d'autres suggester des algorithmes que vous trouverez ici: http://alexbenedetti.blogspot.de/2015/07/solr-you-complete-me.html
Solr Configuration
OriginalL'auteur