我正在使用 elasticsearch-rails 和 elasticsearch-model gem 在我的 rails 应用程序中搜索单词。
这是我要搜索的模型 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
我正在获取搜索结果。但我的问题是:如果我搜索“John team”。
Articles.search('John team').records.records
我获得了多项记录,完美匹配“约翰团队”以及一些与“约翰”或“团队”相关的匹配。
但我想,如果“john team”在我的数据库中完全匹配,结果应该只有 john team。我不想要其他记录。但是如果“john team”不存在,我想要另一个与“john”或“相关的结果”团队的两个关键字。
例子:
Article.search('John team').records.records
responce: ('john team', 'team joy', 'John cena')
但我想要
Article.search('John team').records.records
responce: ('john team')