Положение как результат вместо выделения

Я пытаюсь получить позиции вместо выделенного текста в результате запроса эластичного поиска.

Создайте индекс:

PUT /test/
{
  "mappings": {
    "article": {
      "properties": {
        "text": {
          "type": "text",
          "analyzer": "english"
        },
        "author": {
          "type": "text"
        }
      }
    }
  }
}

Поместите документ:

PUT /test/article/1
{
  "author": "Just Me",
  "text": "This is just a simple test to demonstrate the audience the purpose of the question!"
}

Искать документ:

GET /test/article/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "text": {
              "query": "simple test",
              "_name": "must"
            }
          }
        }
      ],
      "should": [
        {
          "match_phrase": {
            "text": {
              "query": "need help",
              "_name": "first",
              "slop": 2
            }
          }
        },
        {
          "match_phrase": {
            "text": {
              "query": "purpose question",
              "_name": "second",
              "slop": 3
            }
          }
        },
        {
          "match_phrase": {
            "text": {
              "query": "don't know anything",
              "_name": "third"
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  },
  "highlight": {
    "fields": {
      "text": {}
    }
  }
}

Когда я запускаю этот поиск, я получаю результат примерно так:

This is just a simple test to <em>demonstrate</em> the audience the purpose of the <em>question</em>!

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

"hits": [
   { "start_offset": 30, "end_offset": 40 },
   { "start_offset": 74, "end_offset": 81 }
]

Надеюсь, вы поняли мою идею!

1 ответ

Чтобы иметь позицию смещения слова в тексте, вы должны добавить в свой индекс отображение termvector - Док здесь. Как написано в документе, вы должны включить этот параметр во время индекса:

"term_vector": "with_positions_offsets_payloads"

Для конкретного запроса, пожалуйста, перейдите по ссылке на страницу документа

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