Railsアプリで単語を検索するためにelasticsearch-railsとelasticsearch-model gemを使用しています。
これが私のモデル article.rb で、検索して実行したい場所です:
require 'elasticsearch/model'
class Article < ActiveRecord::Base
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
def self.search(query)
__elasticsearch__.search(
{
query: {
multi_match: {
query: query,
fuzziness: 2,
fields: ['title^10', 'text']
}
},
highlight: {
pre_tags: ['<em>'],
post_tags: ['</em>'],
fields: {
title: {},
}
}
}
)
end
end
これが私のモデルコントローラーsearch_controller.rbです
class SearchController < ApplicationController
def search
if params[:q].nil?
@articles = []
else
@articles = Article.search params[:q]
logger.info "LocationController.add_locations called with params: #{@articles.records.each_with_hit { |record, hit| puts "* #{record.title}: #{hit._score}" }}"
end
end
end
検索結果を取得しています。しかし、私の質問は次のとおりです。「ジョンチーム」を検索した場合。
Articles.search('John team').records.records
完全に一致する 'john team' と、'john' または 'team' に関連するいくつかの一致を含む複数のレコードを取得します。
しかし、「john team」がデータベースで完全に一致する場合、結果は john team のみである必要があります。別のレコードは必要ありません。しかし、「john team」が存在しない場合は、「john」または「 team' 両方のキーワード。
例:
Article.search('John team').records.records
responce: ('john team', 'team joy', 'John cena')
でも私はしたい
Article.search('John team').records.records
responce: ('john team')