2015-07-21 1 views
1

Im la construction d'une application à l'aide SOLR 5.2 et je besoin de ce type de match:phrases correspondant à SOLR (FILTRE SHINGLE)

si j'ai stockées Champs de nom: » BLA2 BLA1- "et le nom:" quelque chose BLA2 bla3 « quand je QUERY quelque chose comme nom: » quelque chose quelque chose BLA1- BLA2 bla3 bla4" je en ai besoin pour correspondre les deux termes.

donc ce que je fini par faire est de définir ce type de champ:

J'utilise les mots-clés Tokenizer pour indexation.

J'utilise Tokenizer et filtre Whitespace pour bardeaux requête donc je reçois quelque chose comme ça "tra kla ZLA bla cla" sorties "tra", bla "bla tra kla", "tra kla ZLA bla" ....

J'ai essayé dans l'analyse et les travaux de bardeaux bien mais le problème est quand j'exécute ma question avec des données réelles cela ne semble juste pas trouver une allumette.

<fieldType name="shingleparse" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/>  
<filter class="solr.ShingleFilterFactory" outputUnigrams="false" outputUnigramsIfNoShingles="true" minShingleSize="2" maxShingleSize="5"/> 
    </analyzer> 
</fieldType> 

<field name="name" type="shingleparse" indexed="true" stored="true" required="true" multiValued="false" /> 
+1

[Mot Tokenizer] (https://cwiki.apache.org/confluence/display/solr/Tokenizers#Tokenizers-KeywordTokenizer) traite le champ de texte entier comme un seul jeton. Donc, quand vous indexez vos données, cela peut être vu comme un jeton 'bla2 something bla3'. – alexf

+0

est exactement comment il est censé être traité parce que par exemple si je interroge smth comme "** bla2 quelque chose bla3 bla4 bla5 **" je vais obtenir des bardeaux "** bla2 quelque chose **", "** bla2 quelque chose bla3 * * ", ... et il devrait correspondre, mais pour une raison quelconque, il ne – BrainOverflow

+0

Ainsi, dans votre exemple, le ** premier ** (" bla1 bla2 ") correspond et non le ** second ** (' bla2 quelque chose bla3')? – alexf

Répondre

0

Pouvez-vous vérifier si cela fonctionne pour votre exigence.

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 
+0

Cela ne résout pas mon problème cause si je demande par exemple le mot exact "** bla1 bla2 **" il correspond mais si je requête nom: "** bla1 bla2 ttttttt **" cela ne correspond pas et je veux qu'il corresponde – BrainOverflow

+0

il va correspondre ... vérifier ceux-ci à la page d'analyse http: //localhost/solr/admin/analysis.jsp –

+0

J'ai essayé le second aussi, il correspond pour le fieldType ci-dessus –