Обрабатывать запрос Flexiblesearch специальными символами - PullRequest
0 голосов
/ 22 января 2019

Я использую абстракцию Searchkick для нашей реализации Elasticsearch.

Это конфиг:

  searchkick(
    word_middle: [:name],
    suggest: [:name],
    searchable: [:name],
    synonyms: -> { CSV.read("app/lib/club_and_team_search_synonyms.csv") },
    callbacks: :async,
  )

Вот запрос

  Searchkick.search(
        query,
        index_name: [Club, Team],
        fields: [:name],
        match: :word_middle,
        operator: "or",
        limit: 50,
        where: { country_id: country_id, hide_in_search: false },
        track: track_search,
 )

Хорошо, проблема в том, что я хочу найти следующий клуб с именем Saint Jean d Angely

Если я ищу Saint Jean d Angely, он возвращается нормально, и если также отлично работает с Saint Jean dAngely, но получает немного меньшую оценку.

Однако, если я ищу так:Saint Jean d'Angely он получает очень низкий балл, следовательно, многие другие клубы получают более высокий балл, даже если они выглядят намного хуже - я знаю, что это также частично связано с использованием n-грамм, но все еще трудно понять,как оценка стала намного ниже.

Индекс поиска word_middle использует ascii_folding позади сцены между прочим, так как лучше всего обрабатывать подобные вещи?

Должен ли я вырезать специальные символы перед выполнением запроса,так как я уже обрабатываю специальные символы в индексе или есть более оптимальный способ?

...