我在rails应用程序中使用elasticsearch-rails gem。一切都已设置,但是当我搜索两个单词之间有空格时遇到麻烦。 这是我的代码:
SEARCH_FIELDS = %w"name email"
attribute :text, type: String, default: ''
response = MyModelName.search([query, filter, sort].compact.reduce(:merge)).page(page).per(per_page)
def query
query = {}.tap do |q|
q[:query_string] = {query: text, default_operator: 'AND', fields: SEARCH_FIELDS, allow_leading_wildcard: true}
end
return {query: query}
end
def filter
filters = []
filters << {term: {user_id: user_id}}
filters << {term: {hide: (hide.nil? ? false : hide)}}
return {filter: {and: filters}}
end
如果我搜索名称首字母缩写(如“ John”)的首字母缩写词效果很好,但未找到带有空格(“ John doe”)的名字。
答案 0 :(得分:0)
确保您要为查询构建正确的语法,是否要在ES中实现完全匹配,必须在qoutes之间设置查询
search_field:“丹尼尔·阿塞维多”
{
"size": 10,
"query": {
"query_string": {
"query": "search_field:\"daniel acevedo\""
}
}
}