2011-10-08 11 views
7

Próbuję wyszukać częściowe słowo za pomocą Solr, ale nie mogę go uruchomić.Wyszukaj częściowe słowa za pomocą Solr

Używam tego w moim pliku schema.xml.

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type="index"> 
     <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/> 
    </analyzer> 
</fieldType> 

wyszukiwania die h nie będzie działać, ale die hard zwraca niektóre wyniki. Poindeksowałem bazę danych po dodaniu powyższej konfiguracji.

Here to adres URL i dane wyjściowe podczas wyszukiwania die hard. Debugger jest włączony.

Here to adres URL i dane wyjściowe podczas wyszukiwania die h. Debugger jest włączony.

Używam Solr 3.3. Here to pozostała część pliku schema.xml.

+0

Rozwiązałem to. przejdź do: http://stackoverflow.com/questions/4824954/solr-partial-and-full-string-match/8247013#8247013 – wormhit

Odpowiedz

6

Zapytanie, które udostępniasz, polega na wyszukiwaniu pola "tytuł_tekstu", ale przedstawiony powyżej schemat definiuje pole "tekst". Zakładając, że jest to tylko niedopatrzenie, a pole title_text jest zdefiniowane tak, jak w twoim poście, myślę, że prawdopodobnym problemem jest to, że NGramTokenizer jest skonfigurowany z minGramSize = "3", a spodziewasz się dopasować używając tokena pojedynczego znaku.

Możesz spróbować zmienić minGramSize na 1, ale nieuchronnie doprowadzi to do niektórych bardzo nieefektywnych indeksów; i zastanawiam się, czy naprawdę chcesz mieć "e" pasujące do każdego filmu z tytułem w tytule?

+0

Czy można zdefiniować 'NGramTokenizerFactory' dla wszystkich indeksów, nie tylko dla' tekst "? Próbowałem wyszukać film "The Dancing Masters' używając" Danci', który działał. Ale nie szukał "Danc", żadnych pomysłów, dlaczego? Czy limit 'NGramTokenizerFactory' nie powinien być ustawiony na 3? – Oleander

+0

Analiza (tokenizatory itp.) Są zdefiniowane dla każdego pola w Solr. Jeśli chcesz zaindeksować cały tekst we wszystkich swoich polach jednocześnie, możesz zdefiniować pole copyField, które robi to automatycznie. Podejrzewam, że mecz "Danci" wynika z tokenizacji, a nie z NGram. Jeśli będziesz bałagan w narzędziu administracyjnym, gdzie możesz zobaczyć wyniki analizy, powinieneś być w stanie powiedzieć. –

+0

Korzystanie z copyField działało świetnie. [Tutaj] (https://gist.github.com/1272526) jest wynikiem. Czy znasz przypadkiem jakiekolwiek inne filtry boga, które mógłbym włączyć do mojego pliku schema.xml? – Oleander

Powiązane problemy