0

我有一张有 job_title 字段的表,

我想做一个模糊搜索,让用户在拼错查询关键字时仍然可以得到结果。

例如,我有很多记录都有“Android开发者”作为它的job_title,

当用户发出不正确的搜索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