Как сопоставить имя и фамилию, если имя совпадает, то фамилия в запросе DSL? - PullRequest
1 голос
/ 15 мая 2019

Я индексирую имена в Elasticsearch в одном столбце, некоторые имена имеют только имя, а другие - имя и фамилию, я использовал match_phrase, match_phrase_prefix, multi_match, но он не дал должного результата, поэтому любой вложенный запросМогу ли я использовать совпадение, если имя совпадает, тогда совпадает только с фамилией?

multi_match, match_phrase, match_phrase_prefix

Я пробовал match_phrase, запрос match_phrase_prefix,

example1:

ввод : Джеймс.

фактический вывод: Смит Джеймс, Дэвид Джеймс.

ожидаемый вывод: Джеймс Смит, Джеймс, Джеймс Томас и т. Д.

Пример 2:

вход: Джеймс Уокер.

выход: «Ничего» * ​​1029 *

ожидаемый результат: Джеймс

1 Ответ

0 голосов
/ 16 мая 2019

Если ваша цель - получить только список имен. Вы можете использовать подсказку для завершения

Ниже мой индекс

PUT my_index
{
    "mappings": {
        "properties" : {
            "name" : {
                "type" : "completion"
            }
        }
    }
}

Запрос

POST my_index/_search?pretty
{
    "suggest": {
        "name-suggest" : {
            "prefix" : "<Search text>",
            "completion" : { 
                "field" : "name" 
            }
        }
    }
}

Ниже мой полный документ

"hits" : [
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "joqRxGoBW0RKSbIqHqsw",
        "_score" : 1.0,
        "_source" : {
          "name" : "Smith James"
        }
      },
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "j4qRxGoBW0RKSbIqP6uW",
        "_score" : 1.0,
        "_source" : {
          "name" : "James Smith"
        }
      },
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "kIqRxGoBW0RKSbIqUKvP",
        "_score" : 1.0,
        "_source" : {
          "name" : "James"
        }
      }
    ]
  }
Query:
POST my_index/_search?pretty
{
    "suggest": {
        "name-suggest" : {
            "prefix" : "James",
            "completion" : { 
                "field" : "name" 
            }
        }
    }
}
]

Result:
"suggest" : {
    "name-suggest" : [
      {
        "text" : "James",
        "offset" : 0,
        "length" : 5,
        "options" : [
          {
            "text" : "James",
            "_index" : "my_index",
            "_type" : "_doc",
            "_id" : "kIqRxGoBW0RKSbIqUKvP",
            "_score" : 1.0,
            "_source" : {
              "name" : "James"
            }
          },
          {
            "text" : "James Smith",
            "_index" : "my_index",
            "_type" : "_doc",
            "_id" : "j4qRxGoBW0RKSbIqP6uW",
            "_score" : 1.0,
            "_source" : {
              "name" : "James Smith"
            }
          }
        ]
      }
    ]
...