Извлекать ключевые слова из полей
Я хочу написать запрос для анализа одного или нескольких полей?
т.е. текущие анализаторы требуют, чтобы текст функционировал, вместо передачи текста я хочу передать значение поля.
Если у меня есть такой документ
{
"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, только когда вам нужно. Если вы хотите, чтобы ваш текст при определенных условиях получался другим способом, сценарий снова меняется. По моему мнению, более быстрое и простое решение для последнего сценария - дублирование поля, один раз с анализатором, а второй без