たとえば、「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