我正在使用ElasticSearch with Tire来索引和搜索一些ActiveRecord模型,我一直在寻找索引和搜索关联的"正确"方法.我还没有找到对此最好的做法,所以我想问一下是否有人认为他们认为有效的做法.
作为一个示例设置(这是组成但说明了问题),让我们说我们有一本书,有章节.每本书都有一个标题和作者,以及一堆章节.每章都有文字.我们希望将书籍的字段和章节的文本编入索引,以便您可以按作者搜索书籍,也可以搜索包含特定词语的任何书籍.
class Book < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
has_many :chapters
mapping do
indexes :title, :analyzer => 'snowball', :boost => 100
indexes :author, :analyzer => 'snowball'
indexes :chapters, type: 'object', properties: {
chapter_text: { type: 'string', analyzer: 'snowball' }
}
end
end
class Chapter < ActiveRecord::Base
belongs_to :book
end
Run Code Online (Sandbox Code Playgroud)
那么我用以下搜索进行搜索:
s = Book.search do
query { string query_string }
end
Run Code Online (Sandbox Code Playgroud)
这不起作用,即使看起来索引应该这样做.如果相反我索引:
indexes :chapters, :as => 'chapters.map{|c| c.chapter_text}.join('|'), :analyzer => 'snowball'
Run Code Online (Sandbox Code Playgroud)
这使文本可搜索,但显然它不是一个很好的黑客,它失去了实际的相关对象.我尝试过各种搜索,例如:
s = Book.search do
query do …Run Code Online (Sandbox Code Playgroud) 在阅读轮胎文档时,我的印象是你应该使用其中之一mapping或to_indexed_json方法,因为(我的理解是......)mapping用来喂养to_indexed_json.
问题是,我找到了一些使用它们的教程.为什么?
基本上,我的应用程序现在正在使用to_indexed_json但我无法弄清楚如何设置某些属性的提升值(因此我开始查看映射的原因),我想知道是否使用两者会产生一些冲突.
所以我通过brew安装了elasticsearch:
$ brew install elasticsearch
Run Code Online (Sandbox Code Playgroud)
然后当我运行elasticsearch服务器时:
elasticsearch -f -D es.config=/usr/local/Cellar/elasticsearch/0.19.3/config/elasticsearch.yml
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
{0.20.4}: Setup Failed ...
- FailedToResolveConfigException[Failed to resolve config path [/usr/local/Cellar/elasticsearch/0.19.3/config/elasticsearch.yml], tried file path [/usr/local/Cellar/elasticsearch/0.19.3/config/elasticsearch.yml], path file [/usr/local/Cellar/elasticsearch/0.20.4/config/usr/local/Cellar/elasticsearch/0.19.3/config/elasticsearch.yml], and classpath]
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?任何想法都欢迎.
我这样做了,它对我有用:
获取包裹:
$ curl -k -L -o elasticsearch-0.20.2.tar.gz http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.2.tar.gz
Run Code Online (Sandbox Code Playgroud)
Unzipp:
$ tar -zxvf elasticsearch-0.20.2.tar.gz
Run Code Online (Sandbox Code Playgroud)
运行elasticsearch服务器:
./elasticsearch-0.20.2/bin/elasticsearch -f
Run Code Online (Sandbox Code Playgroud) 在定量信息的视觉显示中,爱德华·图夫特(Edward Tufte)创造了一个术语"斜率图",用于表示非常小的图表(更多信息).权威示例如下所示:

有在slopegraph至少两个实现d3.js在日野:
我对一个更具说明性的实现进行了尝试,并且还保留了两列中值之间的100%对应关系,但是卡住了.正如预期的那样,当数据集中出现具有相似或相同值的项目时,图形会重叠,并且图表不可读.
的幼稚版本(源)使用linear用于计算水平位置刻度,而企图"正常化"的位置(源)使用ordinal的规模.
我相信使用序数量表可以获得更好的结果,根据重叠项的坐标计算偏移量.是否应为两列分别计算偏移量,是应根据数据预先计算,还是在设置属性时动态计算?如何扩展代码库,使具有相同值的项目位于彼此之下,其他项目也相应调整,两列中的值保持在同一水平位置?