Вы можете использовать пользовательский анализатор для поля, чтобы маркеры поля всегда были согласованы. В этом случае вы можете использовать фильтр-токен типа «стоп» (фильтр стоп-слов) с «Разработчиком» в списке стоп-слов (и все, что должно быть эффективно проигнорировано). Это будет применяться как к запросу, так и к данным при индексировании, поэтому, если у вас есть «PHP Developer» в индексе и «PHP» в запросе, они оба будут превращены в токен «PHP», поэтому они будут точное совпадение.
Чтобы сделать это более надежным для разных способов ввода «Разработчика», вы, вероятно, захотите также использовать «строчный» токен-фильтр, поэтому вместо этого вместо этого будет «разработчик».
Следует отметить, что для этого потребуется переиндексировать данные.
Файл настроек будет в конечном итоге что-то вроде этого:
{
"analysis": {
"filter": {
"job_stopwords": {
"type": "stop",
"stopwords": [
"developer", "dev"
]
}
},
"analyzer": {
"job_analyzer": {
"type": "custom",
"filter": [
"lowercase", "job_stopwords"
]
}
}
}
Тогда вам нужно применить анализатор job_analyzer к области работы в отображении для вашего документа.
Чтобы «Разработчик» увеличил оценку попадания, вы можете добавить под-поле для сопоставления для поля, которое использует анализатор по умолчанию. Тогда вы могли бы «потребовать» job_analyzer и «должны» анализируемую версию по умолчанию.
Ваши отображения будет выглядеть примерно так:
{
"job_posting": {
"properties": {
"job_type": {
"type": "string",
"analyzer": "job_analyzer",
"fields": {
"default": {
"type": "string"
}
}
}
}
}
}
Ваш запрос будет тогда быть что-то вроде этого:
{
"query": {
{
"bool": {
"must": {
"match": {
"job_type" : "PHP Developer"
}
},
"should": {
"match": {
"job_type.default" : "PHP Developer"
}
}
}
}
}
}
который будет соответствовать "PHP Developer", "PHP Dev" и «PHP », но« PHP Developer »получит самый высокий балл.
Спасибо, трюк здесь - правильно настроить «cuttoff», но он все еще в порядке, потому что тогда он получит больше очков. –
Можно ли сделать токен с меньшей частотой a * MUST * независимо от частоты одного токена, но токен с меньшей частотой будет * MUST *? –