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