我已经研究了这个问题几个星期了。我正在使用的rails应用程序使用elasticsearch 1.5。我用自制软件管理弹性搜索,并将弹性搜索升级到2.x.该应用程序无法使用此最新版本的elasticsearch,并且搜索功能完全停止工作(由于使用了facet已被弃用)。虽然计划在未来几个月内迁移到聚合,但我还有其他问题需要解决,所以我推出了新版本的elasticsearch。我们的应用程序版本无法通过自制软件提供,因此我在网上找到并下载并使用zip安装。搜索功能再次与应用程序一起使用,但现在rspec无法找到弹性搜索并且根本不会起作用。它说弹性搜索正在开始,但随后会抛出一个错误:
Starting 1 Elasticsearch nodes...sh: elasticsearch: command not found.
&安培;那么这个错误:
/.rvm/gems/ruby-2.0.0-p643/gems/elasticsearch-extensions-0.0.18
/lib/elasticsearch/extensions/test
/cluster.rb:240:in `sleep': execution expired (Timeout::Error)
为了开始从facet迁移到聚合,我必须让rspec工作。在此先感谢您的帮助。我已经为我的弹性搜索位置设置了一个bash别名。我的猜测是rspec没有找到手动安装的版本,但我不清楚在哪里处理这个。
spec_helper code:
def start_es_server
Elasticsearch::Extensions::Test::Cluster.start(nodes: 1) unless Elasticsearch::Extensions::Test::Cluster.running?
# create index(s) to test against.
create_es_index(Item)
end
def stop_es_server
Elasticsearch::Extensions::Test::Cluster.stop if Elasticsearch::Extensions::Test::Cluster.running?
end
RSpec.configure do |config|
config.include Capybara::DSL
config.mock_with :rspec
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.raise_errors_for_deprecations!
config.expect_with(:rspec) { |c| c.syntax = [:should, :expect] }
config.mock_with :rspec do |mocks|
mocks.syntax = [:should, :expect]
mocks.verify_partial_doubles = true
end
答案 0 :(得分:2)
通过查看https://github.com/elastic/elasticsearch-ruby/blob/b3cfdcbde678c2704c0a557a163782b9e027d144/elasticsearch-extensions/lib/elasticsearch/extensions/test/cluster.rb,我找到了这个问题的答案。可以传递给start
方法的可选参数列表包括一个名为:command的命令,默认为“elasticsearch”。这可以通过指向elasticsearch位置的直接路径来覆盖:
elasticsearch = '/usr/local/elasticsearch-1.5.2/bin/elasticsearch'
Elasticsearch::Extensions::Test::Cluster.start(nodes: 1, command: elasticsearch) unless Elasticsearch::Extensions::Test::Cluster.running?
答案 1 :(得分:0)
尝试SELECT ...
ISNULL(t.TWR, 0) TWR,
ISNULL(t.MarketValue, (SELECT MarketValue FROM Table inner WHERE inner.Date <= t.Date ORDER BY t.Date DESC) MarketValue
FROM Calendar c WITH (NOLOCK)
LEFT JOIN Table t ON t.Date=c.Date
WHERE c.Date >= @StartDate AND c.Date < @EndDate