我正在尝试优化我的elasticsearch方案。
我有一个字段,这是一个网址-我不想能够查询或过滤它,只是检索它。
我的理解是,定义为"index":"no"的字段不会被索引,但仍然存储在索引中。(参见http://www.slideshare.net/nitin_stephens/lucene-basics中的幻灯片5)这应该与Lucene UnIndexed匹配,对吗?
这让我很困惑,有没有一种方法可以存储一些字段,而不需要占用比内容更多的存储空间,也不会占用其他字段的索引?
我遗漏了什么?
发布于 2013-06-05 00:34:57
我刚开始在堆栈交换上发帖,但我相信我能帮上一点忙!
这里有几个考虑因素:
分析
因为你不想做额外的工作,所以你应该设置"index": "no"。这意味着该字段将不会通过任何标记器和筛选器运行。
此外,当将查询定向到特定字段时,它将不是可搜索的命中:()
"query": {
"term": {
"url": "http://www.domain.com/exact/url/that/was/sent/to/elasticsearch"
}
}*这里"url“是字段名。
但是,字段仍然可以在 _all 字段中进行搜索:(可能会有一个匹配)
"query": {
"term": {
"_all": "http://www.domain.com/exact/url/that/was/sent/to/elasticsearch"
}
}_all字段
默认情况下,每个字段都放在_all字段中。设置"include_in_all": "false"以停止该操作。这对您来说可能不是问题,因为您不太可能错误地搜索带有URL的_all字段。
我正在使用一个模式,其中国家/地区存储为2个字母代码,例如:"NO“表示挪威,并且可能有人使用"NO”对all字段进行搜索,因此我确保设置"include_in_all": "false"。
注意:任何没有显式指定字段的查询都将针对_all字段执行。
存储
默认情况下,elasticsearch将存储整个文档(发送时未分析),并在hit的_source字段中返回给您。如果你关闭了它(如果你的elasticsearch数据库变得越来越大?)然后,您需要显式地设置"store": "yes"来单独存储字段。(要注意的一件事是,store使用yes或no,而不是true或false -它把我绊倒了!)
注意:如果这样做,您将需要请求要显式返回给您的字段。例如:
curl -XGET http://path/index_name/type_name/id?fields=url,another_field终于..。
我将保留elasticsearch来存储整个文档(默认情况下),并使用以下映射。
"type_name": {
"properties": {
"url": {
"type": "string",
"index": "no",
"include_in_all": "false"
},
// other fields' mappings
}
}来源:elasticsearch documentation
发布于 2013-06-05 00:27:52
有两种方法可以将数据输入索引。索引和存储。索引一段数据意味着它被标记化,放在倒排索引中,并且可以进行搜索。存储数据意味着不对其进行标记化、分析或其他操作,也不会将其添加到倒排索引中。它以全文的形式存储在一个完全独立的区域中。它不能被搜索,但可以通过它的文档ID以其原始形式进行检索。
典型的Lucene查询过程是针对索引数据进行查询,并获取匹配文档的后台文档it,然后使用这些文档it检索这些文档的存储数据,并将其显示给用户。
已索引但未存储的数据是可搜索的,但不能以其原始形式检索。
已存储但未编入索引的数据可以在找到命中后检索,但不能搜索。
被索引和存储的数据可以被搜索或检索。
两者都不存在的数据根本不能添加到索引中。
在Lucene FAQ中对此进行了一些介绍。
发布于 2013-06-04 19:05:58
您正在寻找'index' => 'not_analyzed'映射选项。
此外,如果使用_source,则不必指定store => false选项。
https://stackoverflow.com/questions/16911633
复制相似问题