У меня есть индекс ES вида
{
"adminfile" : {
"mappings" : {
"properties" : {
"text" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"title" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
Поле 'title' является заголовком строки, найденной в поле 'text'. Заголовки не содержат пробелов, а тексты являются обычными текстами (предложения с пробелами, точками и т. Д.).
Я хочу получить все термины в индексе и их doc_count и / или периодичность. Я нашел этот запрос в документе ES: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html
GET /adminfile/_search
{
"size": 10,
"aggs" : {
"text" : {
"terms" : {
"field" : "text.keyword",
"order" : { "_count" : "asc" },
"size": 10
}
}
}
}
Возвращает все источники, но области агрегации пусты. Если в этой команде я заменю «text.keyword» на «title.keyword», она сработает и вернет все заголовки в качестве ключей.
Почему это не работает с текстовыми полями?
Есть ли лучшая команда для использования? Я знаю, что это:
GET /adminfile/_search
{
"query" : {
"match" : {"text" : "WordToSearch"}
},
"_source":false,
"aggregations": {
"keywords" : {
"significant_text" : {
"field" : "text",
"filter_duplicate_text": true,
"size": 100
}
}
},
"highlight": {
"fields": {
"text": {}
}
}
}
работает, чтобы получить все вхождения wordToSearch в каждом документе индекса, с количеством и частотой. Есть ли способ попросить эту команду соответствовать каждому слову каждого документа?
РЕДАКТИРОВАТЬ: Я также попытался изменить имя текстового поля на «contenu» на случай, если ES не понравилось поле имени «текст» и типа «текст». Нет эффекта.
Другим вариантом может быть использование https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html, но _termvectors работает только для одного определенного идентификатора (или _mtermvectors для идентификатора, определенного для нескольких элементов, но не для всех документов в любом случае)
EDIT2: я понял, что ignore_above может быть проблемой. Я попытался сократить все свои тексты до 200 символов в качестве теста. Теперь запрос выполняется, за исключением того, что он возвращает весь текст в виде ключа, а не разрезает его на слова.