1

たとえば、「Ebook」というテキストを入力して検索すると、次の結果が得られるとします。

Ebook for Rails
Elastic Ebook
Booking for ebook.

リストから「Elastic Ebook」を選択します。他の何人かのユーザーが検索のために Ebook を入力し、そのほとんどがリストから "Elastic Ebook" を選択したとします。これは、「Ebook」というキーワードに対するElastic Ebookの人気を明確に示しています。したがって、今後の検索では、Elastic Ebook の優先順位を高くして、一番上に表示されるようにしたいと思います。

Elastic Ebook
Ebook for Rails
Booking for an ebook.

これを達成する方法はありますか。

私のコード document.rb :

require 'elasticsearch/model'

class Document < ApplicationRecord
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks
  belongs_to :user

  Document.import force: true


  def self.search(query)
  __elasticsearch__.search({
      query: {
        multi_match: {
          query: query,
          fields: ['name^10', 'service'],
          fuzziness: "AUTO"
      }
    }
    })
  end


  settings index: { 
    "number_of_shards": 1, 
    analysis: {
      analyzer: {
        edge_ngram_analyzer: { type: "custom", tokenizer: "standard", filter: 
          ["lowercase", "edge_ngram_filter", "stop", "kstem" ] },
            }
        },
        filter: {
                  edge_ngram_filter: { type: "edgeNGram", min_gram: "3", 
                                      max_gram: "20" } 
      }
    } do
    mapping do
      indexes :name, type: "string", analyzer: "edge_ngram_analyzer"
      indexes :service, type: "string", analyzer: "edge_ngram_analyzer"
    end 
  end
end

検索コントローラ コード:

def search
  if params[:query].nil?
    @documents = []
  else
    @documents = Document.search params[:query]
  end
end
4

1 に答える 1