假设我有5个电影片名:
我想使用此预期行为实现自动完成搜索字段:
这个用例似乎很明显,必须被许多人使用,但是我只是无法使其正常工作,而且我似乎也找不到任何答案或文档来提供帮助。这是我当前的模型:
class Film < Media
include Tire::Model::Search
include Tire::Model::Callbacks
settings :analysis => {
:filter => {
:title_ngram => {
"type" => "edgeNGram",
"min_gram" => 2,
"max_gram" => 8,
"side" => "front" }
},
:analyzer => {
:title_analyzer => {
"tokenizer" => "lowercase",
"filter" => ["title_ngram"],
"type" => "custom" }
}
} do
mapping do
indexes :title, :type => 'string', :analyzer => 'title_analyzer'
indexes :int_english_title, :type => 'string', :analyzer => 'title_analyzer'
end
end
end
以及如何在我的search_controller中处理查询:
search = Tire.search ['books', 'films', 'shows'], :load => true, :page => 1, :per_page => 10 do |s|
s.query do |query|
query.string "title:#{params[:search]}"
end
end
@results = search.results
这会产生一些奇怪的行为:
我认为您可以通过将match
查询设置为来实现所需的功能type:"phrase_prefix"
。您的大多数(但不是全部)示例都可以使用。
使用Ngrams,您可以更好地控制该过程,但是它们的召回率很高(它们通常会返回想要的更多数据),因此您必须与之抗争。这是您在多个查询字词(“ Sans
so”)中观察到的“奇怪行为”,因为它们可以有效地作为Sans OR so
查询执行。
尝试使用default_operator: "AND"
选项(参见轮胎的query_string_test.rb),或者更确切地说,match
查询(见轮胎的match_query_test.rb)与operator: "AND"
选项。
有一些有关自动完成,轮胎和Ngrams的文章:
问题内容: 我希望能够将多个单词搜索与多个字段匹配,其中每个搜索的单词都包含在 任何 字段,任何组合中。问题是我想 避免使用 query_string。 我希望搜索“ John Smith”以仅匹配文档1。以下查询满足了我的需要,但我宁愿避免使用query_string,以防用户传递“ OR”,“ AND”和任何其他高级参数。 问题答案: 您正在寻找的是多重匹配查询,但是它的执行效果并不理想。 比
我的文件:syn.txt 一切都很好,除了同义词: 我做了一些研究,我发现了以下几点: 所以我试图改变我的配置文件,并在索引中添加过滤器,但它不起作用。 什么东西有什么想法吗?
问题内容: 我有一个选择,像查询seach形式,如下所示: 我的问题是,如果有人搜索“苹果和梨”,那么我没有得到任何包含任何单词的结果,我只能使其返回包含所有单词的结果(1个结果)。 任何人都可以帮助我进行更多搜索吗?提前致谢。 问题答案: 因此,您想要使用输入的每个单词而不是确切的字符串进行AND搜索吗?大概是这样的: 这将给您一个查询,例如: 如果要匹配任何搜索词而不是全部搜索词,请将AND更
问题内容: 我从来没有真正听到过关于这个问题的直接答案,我只需要FULLTEXT搜索包含多个单词“ Firstname Lastname”的几列 但是,如果我在此处输入多个单词,它将无法运行查询。 问题答案: 如果要进行精确搜索:
问题内容: 我曾经使用过django,haystack和elasticsearch。 我的search_index.py: 搜索表格: 模板: 看 ` 我得到所有的价值,那里有“老板”和“挡泥板” 当您在搜索框中输入“ boss fender”时,我没有结果。从搜索表单中,我只能得到一个单词的结果,例如“老板”。如何使搜索多个单词的能力? 问题答案: 这个月我陷入了这个问题。 为了执行正确的查询,
我在一个项目中使用全文搜索。我想搜索多个单词,但我有一个问题。所以我的查询是; 这个查询是包括word1或word2或word3或word4的搜索,但我想搜索包括word1或word2或word3 word4的搜索 那么解决方案是什么呢?