Elasticsearch не возвращает ожидаемый документ в результатах поиска - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть коллекция клиентов, которые имеют имя, фамилию, адрес электронной почты, описание и идентификатор владельца. Я хочу взять строку символов из приложения и выполнить поиск по всем полям в порядке приоритета. Я использую повышение для достижения этой цели.

В настоящее время у меня есть много тестовых клиентов с именем Шон в различных областях документов. У меня есть 2 документа, которые содержат электронное письмо с sean. jones@email.com. Один документ содержит тот же адрес электронной почты в описании.

Когда я выполняю следующий поиск, я пропускаю документ в результатах поиска, который не содержит адрес электронной почты в описании.

Вот мой запрос:

{
  "query" : {
    "bool" : {
      "filter" : {
        "match" : {
          "ownerId" : "acct_123"
        }
      },
      "must" : [
        {
          "bool" : {
            "should" : [
              {
                "prefix" : {
                  "firstName" : {
                    "value" : "sean",
                    "boost" : 3
                  }
                }
              },
              {
                "prefix" : {
                  "lastName" : {
                    "value" : "sean",
                    "boost" : 3
                  }
                }
              },
              {
                "terms" : {
                  "boost" : 2,
                  "description" : [
                    "sean"
                  ]
                }
              },
              {
                "prefix" : {
                  "email" : {
                    "value" : "sean",
                    "boost" : 1
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

Вот документ, который мне не хватает:

{
  "_index" : "xxx",
  "_id" : "cus_123",
  "_version" : 1,
  "_type" : "customers",
  "_seq_no" : 9096,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "firstName" : null,
    "id" : "cus_123",
    "lastName" : null,
    "email" : "sean.jones@email.com",
    "ownerId" : "acct_123",
    "description" : null
  }
}

Когда я смотрю на текущие результаты, все документы имеют оценку 3,0. У них в названии также есть «Шон», поэтому они набирают больше очков. Когда я делаю _объяснение по отсутствующему документу, с запросом выше, я получаю следующее:

{
    "_index": "xxx",
    "_type": "customers",
    "_id": "cus_123",
    "matched": true,
    "explanation": {
        "value": 1.0,
        "description": "sum of:",
        "details": [
            {
                "value": 1.0,
                "description": "sum of:",
                "details": [
                    {
                        "value": 1.0,
                        "description": "ConstantScore(email._index_prefix:sean)",
                        "details": []
                    }
                ]
            },
            {
                "value": 0.0,
                "description": "match on required clause, product of:",
                "details": [
                    {
                        "value": 0.0,
                        "description": "# clause",
                        "details": []
                    },
                    {
                        "value": 1.0,
                        "description": "ownerId:acct_123",
                        "details": []
                    }
                ]
            }
        ]
    }
}

Вот мои отображения:

{
  "properties": {
    "firstName": {
      "type": "text",
      "index_prefixes": {
        "max_chars": 10,
        "min_chars": 1
      }
    },
    "email": {
      "analyzer": "my_email_analyzer",
      "type": "text",
      "index_prefixes": {
        "max_chars": 10,
        "min_chars": 1
      }
    },
    "lastName": {
      "type": "text",
      "index_prefixes": {
        "max_chars": 10,
        "min_chars": 1
      }
    },
    "description": {
      "type": "text"
    },
    "ownerId": {
      "type": "text"
    }
  }
}
        "my_email_analyzer": {
          "type": "custom",
          "tokenizer": "uax_url_email"
        }

Если я понимаю это правильно, потому что этот документ только оценивает 1, это не встречает определенный порог. Я попытался настроить min_score, но мне не повезло. Любые мысли о том, как я могу включить этот документ в результаты поиска?

большое спасибо

1 Ответ

1 голос
/ 04 февраля 2020

Зависит от того, что означает «пропущенный»:

  1. означает, что документ не входит в число обращений («всего»)?
  2. или же сам документ не отображается как попадание в список совпадений?

Если это №2, вы можете увеличить количество документов, которые Elasticsearch выбирает и возвращает, добавив size -предложение к вашему поисковому запросу (размер по умолчанию 10):

Пример

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