2014-12-09 4 views
2

Я собираюсь создать индекс, который для каждого документа разбивает его на слово ngrams (uni, bi и tri), затем фиксирует векторный анализ на всех этих ngrams. Возможно ли это с помощью Elasticsearch?Многословные векторы вектора с Word nGrams?

Например, для поля документа, содержащего «Красные автомобильные приводы». Я мог бы получить информацию:

red - 1 instance 
car - 1 instance 
drives - 1 instance 
red car - 1 instance 
car drives - 1 instance 
red car drives - 1 instance 

Заранее благодарен!

ответ

4

Предполагая, что вы уже знаете о Term Vectors api, вы можете применить shingle token filter во время индекса, чтобы добавить эти термины как независимые друг от друга в поток токенов.

Установка min_shingle_size в 1 (вместо по умолчанию 2), и max_shingle_size, по крайней мере, 3 (вместо по умолчанию 2)

И на основании того, что вы оставили «» из возможного вы должны использовать stop words filter перед применением фильтра черепицы.

настройки анализатора будет что-то вроде этого:

{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "evolutionAnalyzer": { 
      "tokenizer": "standard", 
      "filter": [ 
      "standard", 
      "lowercase", 
      "custom_stop", 
      "custom_shingle" 
      ] 
     } 
     }, 
     "filter": { 
     "custom_stop": { 
      "type": "stop", 
      "stopwords": "_english_", 
      "enable_position_increments":"false" 
     }, 
     "custom_shingle": { 
      "type": "shingle", 
      "min_shingle_size": "1", 
      "max_shingle_size": "3" 
     } 
     } 
    } 
    } 
} 

Вы можете проверить с помощью анализатора _analyze api endpoint.

+0

Отличный ответ, только то, что я искал, спасибо. Немного подшучило, что Lucene 4.4 больше не поддерживает «enable_position_increments» и требует, чтобы вы возвращали символ наполнителя вместо того, чтобы просто игнорировать токены, содержащие стоп-слова, но я получаю логику этой проблемы. Для всех, кто ищет, почему новые версии Lucene не могут с этим справиться, https://issues.apache.org/jira/browse/LUCENE-4065 Спасибо! – ev0lution37

Смежные вопросы