Извлекать ключевые слова из полей

Я хочу написать запрос для анализа одного или нескольких полей?

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

Если у меня есть такой документ

{
    "desc": "A document description",
    "name": "This name is not original",
    "amount": 3000
}

Я хотел бы вернуть что-то вроде ниже

{
    "desc": ["document", "description"],
    "name": ["name", "original"],
    "amount": 3000
}

2 ответа

Решение

Вы можете использовать Term Vectors или Multi Term Vector для достижения того, что вы ищете:

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-termvectors.html

Вам нужно будет указать идентификаторы полей, которые вы хотите, а также поля, и он будет возвращать массив проанализированных токенов для каждого имеющегося у вас документа, а также определенную другую информацию, которую вы можете легко отключить.

GET /exampleindex/_doc/_mtermvectors
{
  "ids": [
    "1","2"
  ],
  "parameters": {
    "fields": [
      "*"
    ]
  }
}

Вернет что-то вроде:

"docs": [
    {
      "_index": "exampleindex",
      "_type": "_doc",
      "_id": "1",
      "_version": 2,
      "found": true,
      "took": 0,
      "term_vectors": {
        "desc": {
          "field_statistics": {
            "sum_doc_freq": 5,
            "doc_count": 2,
            "sum_ttf": 5
          },
          "terms": {
            "amazing": {
              "term_freq": 1,
              "tokens": [
                {
                  "position": 1,
                  "start_offset": 3,
                  "end_offset": 10
                }
              ]
            },
            "an": {
              "term_freq": 1,
              "tokens": [
                {
                  "position": 0,
                  "start_offset": 0,
                  "end_offset": 2
                }
              ]
            }

Ну ладно, это другой сценарий. Чтобы использовать анализатор на поле, вы должны объявить его в отображении, как вы видели в документе. Но если вы сопоставите анализатор с полем в отображении, то все значения поля будут проанализированы. Анализатор изменяет способ индексации вашего текста в инвертированном индексе lucene - так что только как его получить - но не содержание значения. Таким образом, вы можете проанализировать поле и вызвать _analyze API, только когда вам нужно. Если вы хотите, чтобы ваш текст при определенных условиях получался другим способом, сценарий снова меняется. По моему мнению, более быстрое и простое решение для последнего сценария - дублирование поля, один раз с анализатором, а второй без

Другие вопросы по тегам