Как настроить ElasticSearch для увеличения размытости между строками из одного слова - PullRequest
0 голосов
/ 16 мая 2018

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

Текущий эластичный запрос слишком избирателен, поэтому у меня нет предложений:

query: {
    bool: {
        must_not: {
            ids: {
                values: _usersToIgnore
            }
        },
        should: [
            {
                match: {
                    titlePhrase: {
                        query: title,
                        minimum_should_match: '90%',
                        boost: 2
                    }
                }
            }
        ],
        minimum_should_match: 1
    }
}

Я пытался снизить imum_should_match но это ничего не меняет, я полагаю, что эластик соответствует словам, а не буквам.

Эластичное отображение:

titlePhrase: {
    type: 'text',
    analyzer: 'phrase_analyzer',
    search_analyzer: 'phrase_analyzer'
}

(я не знаючто-нибудь об анализаторах, и это не я сделал это отображение)

В большинстве моих случаев заголовки - это всего лишь одно слово.Таким образом, Elastic находит:

  • других пользователей, которые разделяют одно и то же название (например, разработчик)

  • пользователей, которые разделяют одно слово (например, веб)разработчик, разработчик ios)

, но он не находит никакого соответствия между:

  • разработчик и dev

  • бармен и цирюльник (эластик не заботится, если много писем передается)

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

1 Ответ

0 голосов
/ 17 мая 2018

Чтобы найти соответствие между dev и developer, bartender и barber, можно попытаться выполнить запросы префикса .

{ 
  "query": {
    "prefix" : { "titlePhrase" : "dev" }
  }
}

Это будетразрешить совпадение одинаковых префиксов.

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