2012-03-05 12 views
5

w moim pliku schematu solr Mam domyślny pole wyszukiwania, które wykorzystuje EdgeNGramFilterFactorywyszukiwania w Solr z EdgeNGramFilterFactory i min długości zapytaniu

<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front" /> 

Zakłada się, że moje wyszukiwane jest

tes 

tak Otrzymuję wyniki w następujący sposób:

tess 
test 
tesla 
... 

jeśli szukam

test 

uzyskać wyniki podobne

test 
tess 
tesla 
... 

Jego ok ponieważ używam EdgeNGramFilterFactory z minGramSize = 3 ale Chcę następujące:

Kiedy wyszukać ciąg, których długość jest bardziej niż 3 znaki (na przykład test) Chcę, żeby solr zignorował wszystkie terminy składające się z 3 znaków (EdgeNGramFilterFactory). Kiedy szukam "testu", nie chcę otrzymywać wyników takich jak "tess" lub "tesla". Nie otrzymam wyników, które zaczynają się od testu (4 znaki), jak

test 
test for 
test-drive 
... 

Czy można to skonfigurować w Solr?

Odpowiedz

5

Możesz skonfigurować filtr EdgeNGram tylko w analizatorze indeksów pola; dla analizatora zapytań, nadal wykonuję zwykłą tokenizację bez EdgeNGram. Tak więc, gdy wyszukasz "test", zwrócone zostaną tylko wyniki poprzedzone dokładnym "testem".

config np. (nie definiuj EdgeNGram dla analizatora zapytań)

<fieldType name=...> 
    <analyzer type="index"> 
     ... 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" /> 
    </analyzer> 
    <analyzer type="query"> 
     ... 
     <!-- <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" /> --> 
    </analyzer> 
</fieldType>