Elasticsearch: как хранить векторы терминов

Я работаю над проектом, в котором активно использую Elasticsearch и ссылку moreLikeThis для реализации некоторых функций. Официальная документация для запроса MLT гласит следующее:

Чтобы ускорить анализ, можно хранить векторы терминов во время индексации, но за счет использования диска.

В разделе **Как это работает*. Теперь идея состоит в том, чтобы настроить отображение, чтобы сохранить предварительно рассчитанные векторы терминов. Проблема в том, что из документации кажется неясным, как именно это должно быть сделано. С одной стороны, в MLT, они предоставляют и пример отображения, который выглядит следующим образом:

curl -s -XPUT 'http://localhost:9200/imdb/' -d '{
  "mappings": {
    "movies": {
      "properties": {
        "title": {
          "type": "string",
          "term_vector": "yes"
         },
         "description": {
          "type": "string"
        },
        "tags": {
          "type": "string",
          "fields" : {
            "raw": {
              "type" : "string",
              "index" : "not_analyzed",
              "term_vector" : "yes"
            }
          }
        }
      }
    }
  }
}

С другой стороны, в документации по векторам терминов они предоставляют сопоставление в разделе Пример 1, которое выглядит следующим образом

curl -s -XPUT 'http://localhost:9200/twitter/' -d '{
  "mappings": {
    "tweet": {
      "properties": {
        "text": {
          "type": "string",
          "term_vector": "with_positions_offsets_payloads",
          "store" : true,
          "index_analyzer" : "fulltext_analyzer"
         },
         "fullname": {
          "type": "string",
          "term_vector": "with_positions_offsets_payloads",
          "index_analyzer" : "fulltext_analyzer"
        }
      }
    }
    ....

Это должно create an index that stores term vectors, payloads etc.

Теперь вопрос: какое из отображений следует использовать? Это ошибка в документации или я что-то упустил?


person Nicola Miotto    schedule 28.08.2015    source источник
comment
второй пример также просто хранит дополнительную информацию. Я думаю, вам должно быть достаточно просто использовать yes   -  person Mysterion    schedule 28.08.2015
comment
но такое поведение как-то задокументировано где-нибудь? вот так yes что-то делает, а with_positions_offsets_payloads делает больше?   -  person Nicola Miotto    schedule 28.08.2015


Ответы (1)


Вы правы, кажется, что это явно не упоминается в текущей версии документов, однако в предстоящем выпуске документы 2.0 есть более подробное объяснение.

Векторы терминов содержат информацию о терминах, созданных в процессе анализа, в том числе:

  • список терминов.
  • положение (или порядок) каждого термина.
  • смещения начального и конечного символов сопоставляют термин с его источником в исходной строке.

Эти векторы терминов могут быть сохранены, чтобы их можно было получить для конкретного документа.

Параметр term_vector принимает:

  • no: Векторы термов не сохраняются. (дефолт)
  • yes: Сохраняются только термины в поле
  • with_positions: Термины и позиции сохраняются
  • with_offsets: Термины и смещения символов сохраняются
  • with_positions_offsets: термины, позиции и смещения символов сохраняются
person keety    schedule 28.08.2015
comment
замечательно, спасибо :) Я просто надеюсь, что документ 2.0 применим и к предыдущим версиям, но из нескольких тестов, которые я провел, похоже, что это так - person Nicola Miotto; 28.08.2015