Упругая поисковая конкатенация полей - PullRequest
0 голосов
/ 30 января 2019

Я новичок в упругом поиске и хотел решить вариант использования с приведенной ниже проблемой

У меня есть некоторые документы в формате ниже

{
 "member_id":"number"
 "e_id":"number",
 "c_id":"number",
 "salary":"float"
}

В моем приложении Java я получуВвод строки и необходимо найти соответствующий документ member_id .Алгоритм поиска документа выглядит следующим образом:

ШАГ 1: Взять входную строку как "keyInput".
ШАГ 2: Concat "e_id", "c_id" иceil («salary») как «concatedData»
ШАГ 3: если «concatedData» равно «keyInput», ТО возвращает «member_id» соответствующего документа.

ШАГ 2 должен быть выполнен в Elasticsearch.

Может ли кто-нибудь помочь выяснить, можно ли выполнять подобные действия на ES или нет, если да, то как?

Заранее спасибо.

1 Ответ

0 голосов
/ 30 января 2019

Есть два подхода для решения этой проблемы.

1.Использование сценария:

Рекомендуемое сопоставление:

"mappings": {
    "_doc": {
      "properties": {
        "member_id": {
          "type": "integer"
        },
        "e_id": {
          "type": "integer"
        },
        "c_id": {
          "type": "integer"
        },
        "salary": {
          "type": "float"
        }
      }
    }
  } 

Запрос:

{
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source": "String.valueOf(doc['e_id'].value) + doc['c_id'].value + Math.ceil(doc['salary'].value).intValue() == params.inp",
            "lang": "painless",
            "params": {
              "inp": "12345678"
            }
          }
        }
      }
    }
  }
}

Примечание: Следует избегать использования сценариев, поскольку это приводит к снижению производительности.Я настоятельно рекомендую второй подход ниже.

2.Путем объединения значений во время индекса

Для этого все, что вам нужно сделать, это добавить новое поле с типом данных как keyword для хранения объединенного значения.Затем используйте term query для соответствующей фильтрации документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...