2013-07-02 21 views
5

Nie mogę odzyskać terminów połączonych w moich wynikach wyszukiwania SOLR. Na przykład, gdy próbuję wykonać wyszukiwanie takie jak: superman, super man itd., W wynikach wyszukiwania powinienem zobaczyć tytuły takie jak super-man, super-man3 itd.Solr: Wyszukaj terminy łączone dają 0 wyniki

FieldType jest następujący:

<fieldType name="autocomplete_edge" class="solr.TextField"> 
    <analyzer type="index"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="1" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
    </analyzer> 
    <analyzer type="query"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="^(.{30})(.*)?" replacement="$1" replace="all" /> 
    </analyzer> 
</fieldType> 

Proszę o pomoc.

Pozdrowienia

+0

Czy możesz opublikować typ pola w bardziej czytelnym formacie? – Jayendra

+0

Witam, oryginalne pytanie zostało zmodyfikowane, aby mieć treść w bardziej czytelnym formacie.Szukany termin, taki jak super, super-, super-man, superman, zwróci pożądane tytuły. Przypadku, w którym to się nie udaje, jest: super człowiek, który daje 0 wyników –

Odpowiedz

2

Sugerowałbym użyciu WordDelimiterFilterFactory dla przypadku użycia.

WordDelimiterFilterFactory pozwala na generowanie tokenów, które można podzielić na specjalne znaki i liczby, a także zachować oryginał, aby pasował do wyszukiwanych terminów.

np.
generateWordParts będzie konwertować super-man ->super, man
splitOnNumerics wygeneruje super man3 ->super, man, 3
catenateWords będzie konwertować super-man ->superman
catenateAll będzie konwertować super-man3 ->superman3

Więc byłoby to zapewnić Ci możliwość pasuje do kombinacji tych samych słów:

0

Zakładając, że jesteś tokenem zing twoje myślniki ok (patrz WordDelimiterFilterFactory jak wspomniano w odpowiedzi poniżej) to jest twoje domyślne pole (df) w twoim pliku konfiguracyjnym solr lub przekazane jako parametr (& df = xxxx) tak samo jak pole, w którym tokenizujesz?

Say domyślny pole jest: tekst a indeksowane pole jest: imię

Jeśli zapytać o super-człowieka

name:super man 

Rzeczywista zapytanie jest:

parsedquery_toString: "+name:super +text:man" 

który zdobył nie pasuje. Jeśli zapytać o super-człowieka w cudzysłowie:

name:"super man" 

powinno działać w porządku, ale jest mniej elastyczna:

parsedquery_toString: "name:\"super man\"", 

jeśli ustawisz df do nazwy (np dopasowanie pola indeksowanego) daje:

parsedquery_toString: "+name:super +name:man" 

lub można bezpośrednio zapytać

name:super name:man 

Uwaga: jeśli używasz roztrząsania, może zajść potrzeba spojrzenia na pole mm, jeśli nadal nie pasujesz.

Powiązane problemy