Searchkick 结果不相关

Searchkick results are not relevant

我的相关搜索有问题。以下请求的结果很奇怪:

Candidate.search('martin', fields: [:first_name, :last_name], 
                           match: :word_start, misspellings: false).map(&:name)


["Kautzer Martina",
 "Funk Martin",
 "Jaskolski Martin",
 "Gutmann Martine",
 "Wiegand Martina",
 "Schueller Martin",
 "Dooley Martin",
 "Stiedemann Martine",
 "Bartell Martina",
 "Gerlach Martine",
 "Green Martina",
 "Lang Martine",
 "Legros Martine",
 "Ernser Martina",
 "Boehm Martina",
 "Green Martine",
 "Nolan Martin",
 "Schmidt Martin",
 "Hoppe Martin",
 "Macejkovic Martine",
 "Emard Martine"]

为什么Martina比Martin去得早?

Searckick 配置:

searchkick language: %w(German English), word_start: [:first_name, :last_name]

当使用 word_start 时,searchkick 实际做的是使用 searchkick_word_start_index analyzer 标记所选字段(:first_name:last_name)。该分析器是一个自定义分析器,它使用以下 edgeNGram 标记过滤器:

          searchkick_edge_ngram: {
            type: "edgeNGram",
            min_gram: 1,
            max_gram: 50
          },

因此,当 Kautzer Martina 被编入索引时,实际上会生成并编入以下令牌:

  • :first_name: m, ma, mar, mart, marti, martin, martina
  • :last_name: k, ka, kau, kaut, kautz, kautze, kautzer

同样,对于Funk Martin

  • :first_name: m, ma, mar, mart, marti, martin
  • :last_name: f, fu, fun, funk

如您所见,当搜索 martin 时,两者都会匹配,因为它们都包含标记 martin 并且它们将按分数降序排列(默认)。如果你想对结果进行不同的排序,你可以使用排序并调用你的 search

order: [{last_name: :asc},{first_name: :asc}]

试试这个 拼写错误:{edit_distance: 0}

匹配的问题:您必须匹配准确的单词和大写字母。 我希望这有效。

Searchkick 1.4 修复了这个问题。甚至还有专门针对这个问题的 test case:)