Положение как результат вместо выделения
Я пытаюсь получить позиции вместо выделенного текста в результате запроса эластичного поиска.
Создайте индекс:
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"
Для конкретного запроса, пожалуйста, перейдите по ссылке на страницу документа