是否可以添加一个布尔的自定义脚本字段,如果文档的id存在于作为参数发送的数组中,则返回true?
像这样的东西https://gist.github.com/2437370
用mvel做这个的正确方法是什么?
更新: 无法按照Imotov的答案指定工作.
制图:
分类:
:sort=>{:_script=>{:script=>"return friends_visits_ids.contains(_fields._id.value)", :type=>"string", :params=>{:friends_visits_ids=>["4f8d425366eaa71471000011"]}, :order=>"asc"}}}
place: {
properties: {
_id: { index: "not_analyzed", store: "yes" },
}
}
我没有得到任何错误,文件只是没有正确排序.
更新2
哦,我确实在文件上得到了回复:
"sort"=>["false"]
我在同一个Ubuntu服务器上有一个Rails 3应用程序(使用轮胎gem)的暂存和生产实例.似乎这两个实例都共享相同的弹性搜索索引,这显然不是我想要的.
如何让我的生产和登台实例使用单独的实例?
这可能很简单,但我无法解决.我在Project类上有这个轮胎/ elasicsearch查询:
def self.search(params)
tire.search(load: true, page: params[:page], per_page: 8) do
query do
boolean do
must { string params[:query], default_operator: "AND" } if params[:query].present?
must { term :status, "posted" }
must { term :budget, params[:budget] } if params[:budget].present?
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我需要状态术语搜索'已发布'或'已关闭'并且无法解决此问题.我试过term:status,["posted","closed"]但是这不会返回结果所以可能正在执行AND.感谢这里正确的轮胎语法.(注意不要在这里寻找jason/elasticsearch字符串)非常感谢!
我的模型有一个标签字段,它是一个标签数组.我遇到的问题是我希望标签像关键字一样工作,但ES为了分面的目的以某种方式将它们分成空格.
映射是:
indexes :tags, type: :array
Run Code Online (Sandbox Code Playgroud)
热门标签的查询是:
tire.search do
facet 'tags' do
terms :tags, size: 100
end
end
Run Code Online (Sandbox Code Playgroud)
现在结果是单个词.例如,标记为"复古音乐","令人敬畏"的记录将最终具有三个单独的标签.同样,如果我查询搜索"复古音乐"(must { term 'tags', options[:tag] }),那将失败,而对"复古"或"音乐"的查询将成功.这里所希望的行为是标签应该是原子的,因此只有"复古音乐"(或"真棒")标签搜索才能成功.
到目前为止,爱轮胎和弹性搜索,但无法弄清楚如何搜索范围之间的值,如:
并返回所有年龄介于这两个范围之间的个人资料?我有一个整数列Profile.age
到目前为止功能不全
def self.search(params)
#, default_operator: "AND
tire.search(load: true, page: params[:page], per_page: 20) do
query do
should { string params[:query] } if params[:query].present?
should { integer age_to[:age_to] } if params[:age_to].present?
end
to_curl
end
end
Run Code Online (Sandbox Code Playgroud) 虽然我已经看到很多关于它提到这个相对简单的说法,但我还没有看到它正常工作.假设我有这个:
class Car < ActiveRecord::Base
settings analysis: {
filter: {
ngram_filter: { type: "nGram", min_gram: 3, max_gram: 12 }
},
analyzer: {
partial_analyzer: {
type: "snowball",
tokenizer: "standard",
filter: ["standard", "lowercase", "ngram_filter"]
}
}
} do
mapping do
indexes :name, index_analyzer: "partial_analyzer"
end
end
end
Run Code Online (Sandbox Code Playgroud)
让我们说我有一辆名为"福特"的汽车,我更新了我的索引.现在,如果我搜索"福特":
Car.tire.search { query { string "Ford" } }
Run Code Online (Sandbox Code Playgroud)
我的车在我的结果中.现在,如果我寻找"For":
Car.tire.search { query { string "For" } }
Run Code Online (Sandbox Code Playgroud)
我的车再也找不到了.我认为nGram过滤器会自动为我处理它,但显然它不是.作为临时解决方案,我使用通配符(*)进行此类搜索,但这绝对不是最佳方法,是我搜索中的min_gram和max_gram定义关键元素.谁能告诉我他们是如何解决这个问题的?
我正在使用Rails 3.2.12和ruby 1.9.3.ElasticSearch版本为0.20.5.
我正试图通过轮胎/弹性搜索来实现"范围式"功能.为什么这不起作用,即使我的状态为"Test1"或"Test2"的条目?结果总是空的.
collection = @model.search(:page => page, :per_page => per_page) do |s|
s.query {all}
s.filter :terms, :status => ["Test1", "Test2"]
s.sort {by :"#{column}", "#{direction}"}
end
Run Code Online (Sandbox Code Playgroud)
没有过滤器,该方法工作正常.过滤方法有问题吗?!我检查了轮胎doku ....它应该工作.
谢谢!:)
我想将ids查询与must_not子句结合起来.我正在使用(重新)轮胎宝石与导轨应用.
我正在做这样的事情:
query do
ids ["foo", "bar", "test"]
end
Run Code Online (Sandbox Code Playgroud)
哪个有效.但是,当我尝试将它与must_not子句组合时,我收到错误 - must_not仅boolean适用于范围,不包括ids查询.有没有办法将这两个查询结合起来?
发出刷新请求和清空elasticsearch的缓存之间有什么区别?重新启动elasticsearch是否实现了这些?