Можно ли узнать характер позиции каждого выделенного фрагмента? Мне нужно сопоставить выделенный текст обратно в исходный документ и имеющих характер позиции позволят.
Например:
curl "localhost:9200/twitter/tweet/_search?pretty=true" -d '{
"query": {
"query_string": {
"query": "foo"
}
},
"highlight": {
"fields": {
"message": {"number_of_fragments": 20}
}
}
}'
возвращает эту highglight:
"highlight" : {
"message" : [ "some <em>foo</em> text" ]
}
Если поле сообщения в найденном документе были:
"Here is some foo text"
есть ли способ, чтобы знать, что фрагмент начинается в 8 и заканчивается Чаре в Чаре 21 соответствующего поля?
Зная начальную и конечную смещение подобрано маркер было бы хорошо для меня, возможно, есть способ получить доступ к этой информации через script_fields? (Этот вопрос показано, как получить жетоны, но не компенсирует).
Поле на "сообщение" есть:
"term_vector" : "with_positions_offsets",
"index_options" : "positions"
Клиентский подход на самом деле стандартная практика.
Мы обсуждали добавление смещения, но боятся, что это приведет к еще большей путанице. За смещений относящиеся к Java's в кодировке UTF-16 кодировки, которые, хотя они могут быть использованы для расчета фрагментов от $Лан, это's путь более простой для разбора ответа текст для разделителей, которые вы указали.
Мы закончили тем, расширяя исходный текст такой:
У некоторых[1] Текст[2] по[3] [4]
Затем мы определим собственный анализатор с:
"char_filter": {
"remove_tags": {
"type": "pattern_replace",
"pattern": "\\[[0-9]+\\]",
"replacement": ""
Сейчас в выделенных фрагментов мы получаем тегов местоположения и мы знаем, где в тексте они появляются. Некрасиво, но работает!
Я дал полный ответ здесь