gpt4 book ai didi

ruby-on-rails - Rails4 生产 elasticsearch 错误 - 找不到 geo_point,但在开发中有效

转载 作者:行者123 更新时间:2023-11-29 02:46:09 26 4
gpt4 key购买 nike

我有一个使用 Elasticsearch 和 searchkick 运行良好的 Rails 4 应用程序。我通过设置 geo_point 进行了地理搜索,它在开发中运行良好,但在部署相同的代码并验证生产中的索引后,在具有 3GB 的 Digital Ocean 上RAM 和 Ubuntu-16 操作系统,它因错误而失败 -

A Searchkick::InvalidQueryError occurred in home#show_by_location_and_event:

[400] {"error":{"root_cause":[{"type":"query_parsing_exception","reason":"failed to find geo_point field [location]","index":"halls_production_20180520121711247","line":1,"col":724}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"halls_production_20180520121711247","node":"Mn7tHSKLQWSB1N8Sypb6Qg","reason":{"type":"query_parsing_exception","reason":"failed to find geo_point field [location]","index":"halls_production_20180520121711247","line":1,"col":724}}]},"status":400}
app/controllers/home_controller.rb:168:in `show_by_location_and_event'

home_controller.rb

  lat_lng = Geocoder.coordinates(@location)
@event_name = params[:event_name]
###XXXX FAILING HERE AT BELOW LINE
@halls = Hall.get_completed_halls_only.search @location ,
where: {
location: { near: lat_lng,within: "20km"} ,
workflow_state: "accepted",
active: "true"
}

models/hall.rb

##added geo_point
##hall has one address association
searchkick word_start: [:name, :slug, :description, :facebook_link],
word_middle: [:name, :slug, :description, :facebook_link],
text_start: [:name, :slug] , locations: ["location"]

def search_data
{
location: [self.address.latitude, self.address.longitude],
}
end

在用于开发/生产的 Rails 控制台中搜索查询

    ###=====================query works in development rails console=================

2.2.4 :023 > @halls = Hall.get_completed_halls_only.search "Mumbai" , where: { location: { near: [72.8776559,19.0759837],within: "20km"}}
Hall Search (10.0ms) curl http://localhost:9200/halls_development/_search?pretty -d '{"query":{"bool":{"must":{"dis_max":{"queries":[{"match":{"_all":{"query":"Mumbai","boost":10,"operator":"and","analyzer":"searchkick_search"}}},{"match":{"_all":{"query":"Mumbai","boost":10,"operator":"and","analyzer":"searchkick_search2"}}},{"match":{"_all":{"query":"Mumbai","boost":1,"operator":"and","analyzer":"searchkick_search","fuzziness":1,"prefix_length":0,"max_expansions":3,"fuzzy_transpositions":true}}},{"match":{"_all":{"query":"Mumbai","boost":1,"operator":"and","analyzer":"searchkick_search2","fuzziness":1,"prefix_length":0,"max_expansions":3,"fuzzy_transpositions":true}}}]}},"filter":[{"geo_distance":{"location":[19.0759837,72.8776559],"distance":"20km"}}]}},"size":1000,"from":0,"timeout":"11s","_source":false}'

=> #<Searchkick::Results:0x00000005bed2a0 @klass=Hall(id: integer, name: string, homepage_link: string, description: text, hall_request_id: integer, active: boolean, announcements_count: integer, comments_count: integer, managers_count: integer, pictures_count: integer, videos_count: integer, testimonials_count: integer, created_at: datetime, updated_at: datetime, capacity_in_persons: string, recomendations_count: integer, checkins_count: integer, deleted_at: datetime, additional_details: text, slug: string, food_type: string, facebook_link: string, workflow_state: string, impressions_count: integer, hall_promotions_count: integer, venue_packages_count: integer), @response={"took"=>5, "timed_out"=>false, "_shards"=>{"total"=>5, "successful"=>5, "failed"=>0}, "hits"=>{"total"=>0, "max_score"=>nil, "hits"=>[]}}, @options={:page=>1, :per_page=>1000, :padding=>0, :load=>true, :includes=>nil, :json=>false, :match_suffix=>"analyzed", :highlighted_fields=>[], :misspellings=>true}>



##====================same above query do not work in production rails console - as a part of debugging that i did==========
2.2.4 :066 > @halls = Hall.get_completed_halls_only.search "Mumbai" , where: { location: { near: [72.8776559,19.0759837],within: "20km"}}
Hall Search (297.8ms) curl http://localhost:9200/halls_production/_search?pretty -d '{"query":{"bool":{"must":{"dis_max":{"queries":[{"match":{"_all":{"query":"Mumbai","boost":10,"operator":"and","analyzer":"searchkick_search"}}},{"match":{"_all":{"query":"Mumbai","boost":10,"operator":"and","analyzer":"searchkick_search2"}}},{"match":{"_all":{"query":"Mumbai","boost":1,"operator":"and","analyzer":"searchkick_search","fuzziness":1,"prefix_length":0,"max_expansions":3,"fuzzy_transpositions":true}}},{"match":{"_all":{"query":"Mumbai","boost":1,"operator":"and","analyzer":"searchkick_search2","fuzziness":1,"prefix_length":0,"max_expansions":3,"fuzzy_transpositions":true}}}]}},"filter":[{"geo_distance":{"location":[19.0759837,72.8776559],"distance":"20km"}}]}},"size":1000,"from":0,"timeout":"11s","_source":false}'

Searchkick::InvalidQueryError: [400] {"error":{"root_cause":[{"type":"query_parsing_exception","reason":"failed to find geo_point field [location]","index":"halls_production_20180520121711247","line":1,"col":677}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"halls_production_20180520121711247","node":"Mn7tHSKLQWSB1N8Sypb6Qg","reason":{"type":"query_parsing_exception","reason":"failed to find geo_point field [location]","index":"halls_production_20180520121711247","line":1,"col":677}}]},"status":400}
from /home/deployer/apps/halls/shared/bundle/ruby/2.2.0/gems/searchkick-2.2.0/lib/searchkick/query.rb:184:in `handle_error'
from /home/deployer/apps/halls/shared/bundle/ruby/2.2.0/gems/searchkick-2.2.0/lib/searchkick/query.rb:85:in `rescue in execute'
from /home/deployer/apps/halls/shared/bundle/ruby/2.2.0/gems/searchkick-2.2.0/lib/searchkick/query.rb:78:in `execute'
from /home/deployer/apps/halls/shared/bundle/ruby/2.2.0/gems/searchkick-2.2.0/lib/searchkick.rb:99:in `search'
from /home/deployer/apps/halls/shared/bundle/ruby/2.2.0/gems/searchkick-2.2.0/lib/searchkick/model.rb:29:in `searchkick_search'
from /home/deployer/apps/halls/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.6/lib/active_record/relation/delegation.rb:70:in `block in search'
from /home/deployer/apps/halls/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.6/lib/active_record/relation.rb:302:in `scoping'
from /home/deployer/apps/halls/shared/bundle/ruby/2.2.0/gems/activerecord-4.2.6/lib/active_record/relation/delegation.rb:70:in `search'


###=====response for elasticsearch on the halls_production index
deployer@Hallpick:~/apps/hallpick/current$ curl 'localhost:9200/halls_production'
{"halls_production_20180527160622250":{"aliases":{"halls_production":{}},"mappings":{"hall":{"_all":{"analyzer":"searchkick_index"},"dynamic_templates":[{"string_template":{"mapping":{"include_in_all":true,"ignore_above":30000,"index":"not_analyzed","type":"string","fields":{"analyzed":{"index":"analyzed","type":"string"}}},"match":"*","match_mapping_type":"string"}}],"properties":{"location":{"type":"geo_point"},"locations":{"type":"geo_point"},"name":{"type":"string","index":"not_analyzed","fields":{"analyzed":{"type":"string","analyzer":"searchkick_index"},"text_start":{"type":"string","analyzer":"searchkick_text_start_index"},"word_middle":{"type":"string","analyzer":"searchkick_word_middle_index"},"word_start":{"type":"string","analyzer":"searchkick_word_start_index"}},"ignore_above":30000},"slug":{"type":"string","index":"not_analyzed","fields":{"analyzed":{"type":"string","analyzer":"searchkick_index"},"text_start":{"type":"string","analyzer":"searchkick_text_start_index"},"word_middle":{"type":"string","analyzer":"searchkick_word_middle_index"},"word_start":{"type":"string","analyzer":"searchkick_word_start_index"}},"ignore_above":30000}}},"_default_":{"_all":{"analyzer":"searchkick_index"},"dynamic_templates":[{"string_template":{"mapping":{"include_in_all":true,"ignore_above":30000,"index":"not_analyzed","type":"string","fields":{"analyzed":{"index":"analyzed","type":"string"}}},"match":"*","match_mapping_type":"string"}}],"properties":{"location":{"type":"geo_point"},"name":{"type":"string","index":"not_analyzed","fields":{"analyzed":{"type":"string","analyzer":"searchkick_index"},"text_start":{"type":"string","analyzer":"searchkick_text_start_index"},"word_middle":{"type":"string","analyzer":"searchkick_word_middle_index"},"word_start":{"type":"string","analyzer":"searchkick_word_start_index"}},"ignore_above":30000},"slug":{"type":"string","index":"not_analyzed","fields":{"analyzed":{"type":"string","analyzer":"searchkick_index"},"text_start":{"type":"string","analyzer":"searchkick_text_start_index"},"word_middle":{"type":"string","analyzer":"searchkick_word_middle_index"},"word_start":{"type":"string","analyzer":"searchkick_word_start_index"}},"ignore_above":30000}}}},"settings":{"index":{"creation_date":"1527437182297","analysis":{"filter":{"searchkick_suggest_shingle":{"max_shingle_size":"5","type":"shingle"},"searchkick_edge_ngram":{"type":"edgeNGram","min_gram":"1","max_gram":"50"},"searchkick_index_shingle":{"token_separator":"","type":"shingle"},"searchkick_search_shingle":{"token_separator":"","output_unigrams_if_no_shingles":"true","output_unigrams":"false","type":"shingle"},"searchkick_stemm r":{"type":"snowball","language":"English"},"searchkick_ngram":{"type":"nGram","min_gram":"1","max_gram":"50"}},"analyzer":{"searchkick_word_start_index":{"filter":["lowercase","asciifolding","searchkick_edge_ngram"],"type":"custom","tokenizer":"standard"},"searchkick_keyword":{"filter":["lowercase","searchkick_stemmer"],"type":"custom","tokenizer":"keyword"},"searchkick_text_end_index":{"filter":["lowercase","asciifolding","reverse","searchkick_edge_ngram","reverse"],"type":"custom","tokenizer":"keyword"},"searchkick_search2":{"filter":["standard","lowercase","asciifolding","searchkick_stemmer"],"char_filter":["ampersand"],"type":"custom","tokenizer":"standard"},"searchkick_word_middle_index":{"filter":["lowercase","asciifolding","searchkick_ngram"],"type":"custom","tokenizer":"standard"},"searchkick_search":{"filter":["standard","lowercase","asciifolding","searchkick_search_shingle","searchkick_stemmer"],"char_filter":["ampersand"],"type":"custom","tokenizer":"standard"},"searchkick_text_start_index":{"filter":["lowercase","asciifolding","searchkick_edge_ngram"],"type":"custom","tokenizer":"keyword"},"searchkick_word_end_index":{"filter":["lowercase","asciifolding","reverse","searchkick_edge_ngram","reverse"],"type":"custom","tokenizer":"standard"},"searchkick_word_search":{"filter":["lowercase","asciifolding"],"type":"custom","tokenizer":"standard"},"searchkick_autocomplete_search":{"filter":["lowercase","asciifolding"],"type":"custom","tokenizer":"keyword"},"searchkick_suggest_index":{"filter":["lowercase","asciifolding","searchkick_suggest_shingle"],"type":"custom","tokenizer":"standard"},"searchkick_text_middle_index":{"filter":["lowercase","asciifolding","searchkick_ngram"],"type":"custom","tokenizer":"keyword"},"searchkick_index":{"filter":["standard","lowercase","asciifolding","searchkick_index_shingle","searchkick_stemmer"],"char_filter":["ampersand"],"type":"custom","tokenizer":"standard"}},"char_filter":{"ampersand":{"type":"mapping","mappings":["&=> and "]}}},"number_of_shards":"5","number_of_replicas":"1","uuid":"gcfBQAZuTpW8YqMVdw2ALg","version":{"created":"2040699"}}},"warmers":{}}}deployer@Hallpick:~/apps/hallpick/current$

是不是因为我的索引是空的,因为生产中没有数据。?我想我已经提供了我所能提供的所有必需的详细信息。仍然想知道问题是什么。

最佳答案

我解决了上述错误,让我分享一下方法。

我认为我的开发和产品上的 Elasticsearch 版本有一些原因。

========on dev==========
Loading development environment (Rails 4.2.6)
2.2.4 :001 > Elasticsearch::Model.client.info
=> {"name"=>"Sunpyre", "cluster_name"=>"elasticsearch", "version"=>{"number"=>"2.3.5", "build_hash"=>"90f433701e64ccd01edbb4", "build_timestamp"=>"2016-07-27T10:36:52Z", "build_snapshot"=>false, "lucene_version"=>"5.5.0"}, "tagline"=>"You Know, for Search"}
2.2.4 :002 >

=======on prod=========
Loading production environment (Rails 4.2.6)
2.2.0 :001 > Elasticsearch::Model.client.info
=> {"name"=>"Production Node", "cluster_name"=>"elasticsearch", "cluster_uuid"=>"NCPUn7V084cpIA", "version"=>{"number"=>"2.4.6", "build_hash"=>"5376dca9f70f3abe0ace8240fd", "build_timestamp"=>"2017-07-18T12:17:44Z", "build_snapshot"=>false, "lucene_version"=>"5.5.4"}, "tagline"=>"You Know, for Search"}
2.2.0 :002 >

所以像下面这样的映射在开发中有效但在生产中无效。

====在开发上工作,但不在产品上工作=====

searchkick word_start: [:name, :slug],
word_middle: [:name, :slug],
text_start: [:name, :slug],
locations: ["location"]

但是当我添加显式映射时,它在产品上工作..也在开发上工作(不用说)

searchkick merge_mappings: true, 
mappings: {hall:
{properties:

{
locations:
{
type:"geo_point"

}

}

}

},
locations: ["location"],
word_start: [:name, :slug],
word_middle: [:name, :slug],
text_start: [:name, :slug]

mapping do
indexes :location, type: 'geo_point'
end

我认为所有自定义映射都是 2.4 版本所需的东西,这在 ChangeLog 上是不可见的。

希望这对某人有帮助。

关于ruby-on-rails - Rails4 生产 elasticsearch 错误 - 找不到 geo_point,但在开发中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50438868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com