我正在尝试优化我的Elasticsearch方案。
我有一个URL字段-我不想查询或过滤它,而只是检索它。
我的理解是,定义为的字段"index":"no"未建立索引,但仍存储在索引中。(请参阅http://www.slideshare.net/nitin_stephens/lucene- basics中的幻灯片5 )这应该与Lucene UnIndexed相匹配,对吗?
"index":"no"
这使我感到困惑,是否有一种方法可以存储某些字段,而又不占用更多的存储空间,而又不占用其他字段的索引呢?
我想念什么?
我是刚参加堆栈交换的新手,但相信我可以帮上忙!
这里有一些注意事项:
因为您不想做额外的工作,所以应该设置"index": "no"。这意味着该字段将不会通过任何标记器和过滤器运行。
"index": "no"
此外,将查询定向到特定字段时将 无法搜索 :(无匹配)
"query": { "term": { "url": "http://www.domain.com/exact/url/that/was/sent/to/elasticsearch" } }
*这里“ url”是字段名称。
但是,该字段 仍可在该_all字段中搜索:(可能会受到打击)
_all
"query": { "term": { "_all": "http://www.domain.com/exact/url/that/was/sent/to/elasticsearch" } }
默认情况下,每个字段都会放入该_all字段中。设置"include_in_all": "false"停止。这可能对您来说不是问题,因为您不太可能会_all错误地使用URL 搜索该字段。
"include_in_all": "false"
我正在使用一种模式,在该模式中,国家/地区以2个字母代码存储,例如:“ NO”表示挪威,并且可能有人会对“ NO”的所有字段进行搜索,因此请确保设置"include_in_all": "false"。
注意:任何未明确指定字段的查询都将针对该_all字段执行。
默认情况下,elasticsearch将存储您的整个文档(在您发送时未进行分析),并且它将在匹配的_source字段中返回给您。如果您将其关闭(如果您的elasticsearch数据库可能越来越大?),则需要显式设置"store": "yes"为单独存储字段。(有一点需要注意到的是,store采用yes或no不true和false-它绊倒了我)
_source
"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文档