2016-04-26 21 views
6

関連する検索に問題があります。リクエストを次の結果は非常に奇妙です:Searchkickの結果は関係ありません

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"] 

マルティナが早くマーティンよりも起こっているのはなぜ?

Searckickの設定は:

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

これまでの解決方法はありますか?私はsearchkick – rmcsharry

答えて

1

Searchkick 1.4ではこの問題が修正されています。この質問に専用のtest caseもあります:)

1

word_startを使用して、実際に何searchkick searchkick_word_start_index analyzerを用いて選択されたフィールド(:first_name:last_name)をトークン化することです。だから、

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

Kautzer Martinaがインデックス取得すると、次のトークンが実際に生産され、インデックスが作成されています:

  • :first_namemmamarそれアナライザは、次のedgeNGramトークンフィルタを使用するカスタムです、martmartimartinmartina
  • :last_namekkakaukautkautzkautzekautzer

同様に、Funk Martin用:

  • :first_namemmamarmartmartimartin
  • :last_nameffufun,funk

あなたが見ることができるようにmartinを検索するときの両方がトークンmartinが含まれていると、彼らはスコア(デフォルト)を降順でソートされますので、両方が一致します。あなたは違った結果を注文したい場合は、並べ替えを使用して、この スペルミスをしてみ

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

と同じ問題がありますが、関連性の高い結果を得るにはどうすればよいですか? この場合、私は最初にMartin first_nameのすべてのレコードを持つ必要があります。私がそれを並べ替えると、別の結果が絶対に得られます: Candidate.search( 'martin'、fields:[:first_name、:last_name]、マッチ::word_start、スペルミス:false、order:[{last_name::asc}、 {first_name::asc}])。マップ(&:名) [ "バーテルマルティナ"、 "ベームマルティナ"、 "ドゥーリー・マーティン"、 "Emardマーティン"、 "Ernserマルティナ"、 "ファンク・マーティン"、 "ゲルラッハマーティン"、 "グリーンマルティナ"、 "グリーン・マーティン"、 "Gutmann氏マーティン"、 "ホッペマーティン"、 "Jaskolskiマーティン"、 ...] – rkotov93

+0

次にあなたが最初のfirst_nameので注文する必要があります。やってみて。 – Val

+0

ソート順を 'order:[{first_name::asc}、{last_name::asc}]'に変更しようとしましたか? – Val

0

であなたのsearchを呼び出すことができます:{edit_distance:0}

試合に問題が:あなたが一致する必要がされます正確な単語、および大文字小文字。 これがうまくいきたいです。

関連する問題