目录
Using the geo_bounding_box query
"""
DELETE /mybooks
PUT /mybooks
{
"mappings": {
"properties": {
"join_field": {
"type": "join",
"relations": {
"order": "item"
}
},
"position": {
"type": "integer",
"store": true
},
"uuid": {
"store": true,
"type": "keyword"
},
"date": {
"type": "date"
},
"quantity": {
"type": "integer"
},
"price": {
"type": "double"
},
"description": {
"term_vector": "with_positions_offsets",
"store": true,
"type": "text"
},
"title": {
"term_vector": "with_positions_offsets",
"store": true,
"type": "text",
"fielddata": true,
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
POST _bulk?refresh
{"index":{"_index":"mybooks", "_id":"1"}}
{"uuid":"11111","position":1,"title":"Joe Tester","description":"Joe Testere nice guy","date":"2015-10-22","price":4.3,"quantity":50}
{"index":{"_index":"mybooks", "_id":"2"}}
{"uuid":"22222","position":2,"title":"Bill Baloney","description":"Bill Testere nice guy","date":"2016-06-12","price":5,"quantity":34}
{"index":{"_index":"mybooks", "_id":"3"}}
{"uuid":"33333","position":3,"title":"Bill Klingon","description":"Bill is not\n nice guy","date":"2017-09-21","price":6,"quantity":33}
PUT /mybooks-join
{
"mappings": {
"properties": {
"join": { "type": "join", "relations": { "book": "author" } },
"uuid": { "store": true, "type": "keyword" },
"position": { "type": "integer", "store": true },
"title": {
"term_vector": "with_positions_offsets", "store": true, "type": "text",
"fielddata": true,
"fields": { "keyword": { "type": "keyword", "ignore_above": 256 } }
},
"description": { "term_vector": "with_positions_offsets", "store": true, "type": "text" },
"date": { "type": "date" },
"price": { "type": "double" },
"quantity": { "type": "integer" },
"versions": {
"type": "nested", "properties": { "color": { "type": "keyword" }, "size": { "type": "integer" } }
},
"rating": { "type": "double" },
"name": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } },
"surname": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }
}}}
POST _bulk?refresh
{"index":{"_index":"mybooks-join", "_id":"1"}}
{"uuid":"11111","position":1,"title":"Joe Tester","description":"Joe Testere nice guy","date":"2015-10-22","price":4.3,"quantity":50,
"join": {"name": "book"}, "versions":[{"color":"yellow", "size":5},{"color":"blue", "size":15}]}
{"index":{"_index":"mybooks-join", "_id":"a11", "routing":"1"}}
{"name":"Peter","surname":"Doyle","rating":4.5, "join": {"name": "author", "parent":"1"}}
{"index":{"_index":"mybooks-join", "_id":"a12", "routing":"1"}}
{"name":"Mark","surname":"Twain","rating":4.2, "join": {"name": "author", "parent":"1"}}
{"index":{"_index":"mybooks-join", "_id":"2"}}
{"uuid":"22222","position":2,"title":"Bill Baloney","description":"Bill Testere nice guy","date":"2016-06-12","price":5,"quantity":34,
"join": {"name": "book"}, "versions":[{"color":"red", "size":2},{"color":"blue", "size":10}]}
{"index":{"_index":"mybooks-join", "_id":"a2", "routing":"2"}}
{"name":"Agatha","surname":"Princeton","rating":2.1, "join": {"name": "author", "parent":"2"}}
{"index":{"_index":"mybooks-join", "_id":"3"}}
{"uuid":"33333","position":3,"title":"Bill Klingon","description":"Bill is not\n nice guy","date":"2017-09-21","price":6,"quantity":33,
"join": {"name": "book"}, "versions":[{"color":"red", "size":2}]}
{"index":{"_index":"mybooks-join", "_id":"a3", "routing":"3"}}
{"name":"Martin","surname":"Twisted","rating":3.2,"join": {"name": "author", "parent":"3"}}
POST /mybooks-join/_refresh
"""
1. We want to search the parent (book) of the children (author), which has a term in the name field called martin. We can create this kind of query using the following code:
POST /mybooks-join/_search
{ "query": {
"has_child": {
"type": "author",
"query": { "term": { "name": "martin" } },
"inner_hits" : {}
} } }
The parameters that are used to control this process are as follows:
• The type parameter describes the type of children. This type is part of the same index as the parent; it's the name provided in the join field parameter at index time.
• The query parameter can be executed for the selection of the children. Any kind of query can be used.
• If defined, the score_mode parameter (the default is none; available values are max, sum, avg, and none) allows you to aggregate the children's scores with the parent's ones.
• min_children and max_children are optional parameters. This is the minimum/maximum number of children that are required to match the parent document.
• ignore_unmapped (false by default), when set to true, will ignore unmapped types. This is very useful when executing a query on multiple indices and some types are missing. The default behavior is to throw an exception if there is a mapping error.
POST /mybooks-join/_search
{ "query": {
"has_parent": {
"parent_type": "book",
"query": { "term": {"description": "bill" }}}}}
nested objects are indexed in a special way in Elasticsearch.
POST /mybooks-join/_search
{ "query": {
"nested": {
"path": "versions", "score_mode": "avg",
"query": {
"bool": {
"must": [
{ "term": { "versions.color": "blue" } },
{ "range":{ "versions.size": { "gt": 10 }}
} ] } } } } }
Elasticsearch manages nested objects in a special way. During indexing, they are extracted from the main document and indexed as a separate document, which is saved in the same Lucene chunk of the main document.
The nested query executes the first query on the nested documents, and after gathering the result IDs, they are used to filter the main document. The parameters that are used to control this process are as follows:
• path: This is the path of the parent document that contains the nested objects.
• query: This is the query that can be executed to select the nested objects. Every kind of query can be used.
• score_mode: The default value is avg. The valid values are avg, sum, min, max, and none, which control how to use the score of the nested document matches to improve the query.
"""
DELETE /mygeo-index
PUT /mygeo-index
{
"mappings": {
"properties": {
"pin": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
}
PUT /mygeo-index/_doc/1
{"pin": {"location": {"lat": 40.12, "lon": -71.34}}}
PUT /mygeo-index/_doc/2
{"pin": {"location": {"lat": 40.12, "lon": 71.34}}}
POST /mygeo-index/_refresh
"""
One of the most common operations in geo-localization is searching for a box (square).
The square is usually an approximation of the shape of a shop, a building, or a city.
This kind of query can be used in a percolator for real-time monitoring if users, documents, or events are entering a special place.
POST /mygeo-index/_search?pretty
{ "query": {
"geo_bounding_box": {
"pin.location": {
"bottom_right": { "lat": 40.03, "lon": 72 },
"top_left": { "lat": 40.717, "lon": 70.99 }
} } } }
Elasticsearch has a lot of optimizations to facilitate searching for a box shape. Latitude and longitude are indexed for fast-range checks, so this kind of filter is executed very quickly.
The parameters that are required to execute a geo-bounding box filter are the following:
• top_left (the top and left coordinates of the box).
• bottom_right (the bottom and right coordinates of the box) geo points.
• validation_method (default STRICT) is used for validating the geo point. The valid values are as follows:
o IGNORE_MALFORMED is used to accept invalid values for latitude and longitude.
o COERCE is used to try to correct wrong values.
o STRICT is used to reject invalid values.
• type (memory by default) if the query should be executed in memory or indexed.
POST /mygeo-index/_search
{ "query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"geo_shape": {
"pin.location": {
"shape": {
"type": "polygon",
"coordinates": [
[[-30,50],[-80,30],[-90,80],[-30,50]]
] },
"relation": "within"} } } } } }
This scenario as the following:
• Finding the nearest restaurant within a distance of 20 km
• Finding my nearest friends within a range of 10 km
GET /mygeo-index/_search
{ "query": {
"geo_distance": {
"pin.location": { "lat": 40, "lon": 70 },
"distance": "200km" } } }
The distance query executes a distance calculation between a given geo point and the points in the documents, returning hits that satisfy the distance requirement.
The parameters that control the distance query are as follows:
• The field and point of reference used to calculate the distance. In the preceding example, we have pin.location and (40,70).
• distance defines the distance to be considered. It is usually expressed as a string by a number plus a unit.
• unit (optional) can be the unit of the distance value, if the distance is defined as a number. The valid values are as follows:
o in or inch
o yd or yards
o m or miles
o km or kilometers
o m or meters
o mm or millimeters
o cm or centimeters
• distance_type (arc by default; valid choices are arc, which considers the roundness of the globe, or plane, which simplifies the distance in a linear way) defines the type of algorithm to calculate the distance.
• validation_method (STRICT by default) is used for validating the geo point. The valid values are as follows:
o IGNORE_MALFORMED is used to accept invalid values for latitude and longitude.
o COERCE is used to try to correct wrong values.
o STRICT is used to reject invalid values.
• ignore_unmapped is used to safely execute the query in the case of multi-indices, which can have a missing definition of a geo point.
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳