我是弹性搜索的新手,想在我的应用程序中实现部分单词匹配,不知道如何实现请建议我我的代码如下:
article.rb文件
class Article < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
settings analysis: {
filter: {
ngram_filter: { type: "nGram", min_gram: 2, max_gram: 12 }
},
analyzer: {
partial_analyzer: {
type: "snowball",
tokenizer: "standard",
filter: ["standard", "lowercase", "ngram_filter"]
}
}
} do
mapping do
indexes :title, index_filter: "ngram_filter"
indexes :body, index_analyzer: "partial_analyzer"
indexes :id
end
end
def self.search(params)
tire.search() do
query { string params[:query]} if params[:query].present?
end
end
end
article_controller.rb
class ArticlesController < ApplicationController
def index
if params[:query].present?
@articles = Article.search(params)
# @articles = Article.where(title: params["query"])
else
@articles = Article.all
end
respond_to do |format|
format.js { render :layout => false }
format.html
end
end
end
我也没有太多关于映射r索引的知识,所以请提前告诉我解决方法。
答案 0 :(得分:1)
您可以通过在搜索框中传递星号(*)来执行部分搜索,如:
* SEARCH_TERM
默认情况下,您希望在搜索方法中将其添加为
def self.search(params)
tire.search() do
query { string "*#{params[:query]}*" } if params[:query].present?
end
end