2013-08-14 7 views
5

Wdrażam wyszukiwanie SOLR. Kiedy wpisuję np. Richard Chase, dostaję wszystkich Richardsów w indeksie i wszystkich Chase'ów, takich jak Johnny Chase itp., Kiedy tak naprawdę chcę tylko zwrócić wszystkie nazwiska pasujące do obu Richard AND CHASE.Wykonywanie dopasowania EXACT w poszukiwaniu SOLR

moje ustawienia konfiguracyjne są

<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" /> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <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> 

i moje zapytanie przeszukuje pola tekstowego

tekstu: Richard Chase

jakieś pomysły co robię źle?

+0

jeszcze jedno ... wyszukiwanie musi dopasować przypadki, np. Richard John Chase lub Mr Richard Chase – fredseagul

Odpowiedz

9

Używasz StandardTokenizerFactory, który stosuje się do Word Boundary rules.

Oznaczałoby to, że twoje słowa są podzielone na spacje.

jeśli chcesz prawdziwego dokładne dopasowanie, tj

Richard Chase powrócić dokumentów zawierających tylko Richard Chase dokładnie, to należy Ci KeywordTokenizerFactory.

Ale jak wspomniałeś, chcesz Richard John Chase ale nie Johnny Chase, to mówi mi, że chcesz mecze Richard i Chase.

Możesz wyszukać Richard AND Chase lub zmienić domyślny operator w schema.xml na AND zamiast OR. Pamiętaj, że to ustawienie jest globalne.

+0

tak to jest - podzielę moje wyszukaj termin, a następnie zbuduj moje zapytanie za pomocą AND. dzięki! – fredseagul

2

Musisz użyć PhraseQuery (text:"Richard Chase"), aby pobrać dokumenty, w których zarówno Ricahard, jak i Chase są blisko siebie. Jeśli chcesz również znaleźć, powiedzmy, Richard X. Chase, możesz użyć text:"richard chase"~1.

Zobacz http://www.solrtutorial.com/solr-query-syntax.html

0

Dla dokładnym meczu można ustawić mm (minimalna "powinien" meczów) parametr Twojego parsera zapytań do 100% w solrconfig.xml

<str name="mm">100%</str> 

ten określa minimalną liczba klauzul, które muszą pasować do zapytania. Lub możesz zastąpić ten parametr (q.mm) w czasie zapytań na żądanie: