2014-12-10 12 views
6

W indeksie, który buduję, jestem zainteresowany uruchomieniem zapytania, a następnie (przy użyciu aspektów) zwracaniem półpasiec tego zapytania. Oto analizator używam na tekście:Używanie gontów i słów zatrzymanych za pomocą Elasticsearch i Lucene 4.4

{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "shingleAnalyzer": { 
      "tokenizer": "standard", 
      "filter": [ 
      "standard", 
      "lowercase", 
      "custom_stop", 
      "custom_shingle", 
      "custom_stemmer" 
      ] 
     } 
     }, 
     "filter": { 
     "custom_stemmer" : { 
      "type": "stemmer", 
      "name": "english" 
     }, 
     "custom_stop": { 
      "type": "stop", 
      "stopwords": "_english_" 
     }, 
     "custom_shingle": { 
      "type": "shingle", 
      "min_shingle_size": "2", 
      "max_shingle_size": "3" 
     } 
     } 
    } 
    } 
} 

Głównym problemem jest to, że z Lucene 4.4, zatrzymać filtry nie obsługują parametr enable_position_increments wyeliminować gonty, które zawierają słowa zatrzymania. Zamiast tego chciałbym uzyskać wyniki jak ..

„czerwony i żółty”

"terms": [ 
    { 
     "term": "red", 
     "count": 43 
    }, 
    { 
     "term": "red _", 
     "count": 43 
    }, 
    { 
     "term": "red _ yellow", 
     "count": 43 
    }, 
    { 
     "term": "_ yellow", 
     "count": 42 
    }, 
    { 
     "term": "yellow", 
     "count": 42 
    } 
] 

Naturalnie To znacznie zniekształca liczbę zwracanych półpasiec. Czy istnieje sposób post-Lucene 4.4, aby poradzić sobie z tym bez dokonywania końcowego przetwarzania wyników?

+1

Znalazłeś rozwiązanie tego problemu? – paweloque

+0

duplikat pytania: http://stackoverflow.com/questions/22609100/elasticsearch-shingles-with-stop-words-imimination – paweloque

Odpowiedz

6

Prawdopodobnie nie jest to najbardziej optymalne rozwiązanie, ale najbardziej stonowanym rozwiązaniem byłoby dodanie do analizatora kolejnego filtru, który zabiłby "_" tokeny wypełniacza. W poniższym przykładzie nazwałem go „kill_fillers”:

"shingleAnalyzer": { 
     "tokenizer": "standard", 
     "filter": [ 
     "standard", 
     "lowercase", 
     "custom_stop", 
     "custom_shingle", 
     "custom_stemmer", 
     "kill_fillers" 
     ], 
     ... 

Add „kill_fillers” filtr do listy filtrów:

"filters":{ 
... 
    "kill_fillers": { 
    "type": "pattern_replace", 
    "pattern": ".*_.*", 
    "replace": "", 
    }, 
... 
} 
Powiązane problemy