0

job_title フィールドを持つテーブルがあります。

あいまい検索を作成して、ユーザーがクエリ キーワードのスペルを間違えた場合でも結果を取得できるようにしたいと考えています。

たとえば、job_title として「Android 開発者」を含む多くのレコードがあります。

ユーザーが間違った検索Job.es_qsearch("Andoirddd")を発行した場合、次の助けを借りて同様に機能するはずですNGRAM_ANALYZER

ただし、間違ったキーワードから結果を得ることができました。

入力したときにのみ結果を取得できますJob.es_qsearch("Android")

期待どおりの検索結果を得るにはどうすればよいですか。

ありがとう

ジョブ.rb

NGRAM_ANALYZER = {analysis: {
       filter: {
          autocomplete_filter: {
             type: "edge_ngram",
             min_gram: 3,
             max_gram: 20
          }
       },
       analyzer: {
          ngram_analyzer: {
             type: :custom,
             tokenizer: :standard,
             filter: [
                :lowercase,
                :autocomplete_filter
             ]
          }
       }
    }}

settings NGRAM_ANALYZER do
    mappings do
      indexes :job_title, include_in_all: 'ngram_analyzer'
      indexes :description, include_in_all: 'ngram_analyzer'
    end
end


def self.es_qsearch(*args, &block)
 q_params = {
        multi_match: {
          query: "*#{args}*",
          fields: ['job_title^5', 'description']
        }
      }

  __elasticsearch__.search(
    {
      query: q_params,
    }
  )
end

ファジークエリを使用しましたが、まだ機能していません

ファジー クエリは、このクエリを ES 検索に送信しました

{:index=>"jobs",
   :type=>"job",
   :body=>{:query=>{:bool=>{:must=>[{:fuzzy=>{:description=>{:value=>["electrical"], :fuzziness=>2}}}]}}, :size=>200}},

あいまいクエリ 1: 機能しない

      "bool": {
        "must": [
          {
              "fuzzy": {
                "description": {
                    # min_similarity: 0.4,
                    "value": args,
                    # prefix_length: 0,
                    "fuzziness": 2
                }
              },
            }]
        }

あいまいクエリ 1: 機能しない

        "fuzzy": {
          "description": {
              # min_similarity: 0.4,
              "value": args,
              # prefix_length: 0,
              "fuzziness": 2
          }
        },            
4

0 に答える 0