Lucene 非索引字段存储在索引中
我正在尝试优化我的elasticsearch方案 我有一个字段,它是一个URL-我不想能够查询或过滤它,只是检索它 我的理解是,定义为Lucene 非索引字段存储在索引中,lucene,elasticsearch,Lucene,elasticsearch,我正在尝试优化我的elasticsearch方案 我有一个字段,它是一个URL-我不想能够查询或过滤它,只是检索它 我的理解是,定义为“index”:“no”的字段没有索引,但仍然存储在索引中。 (请参见中的幻灯片5) 这应该和Lucene的未索引匹配,对吗 这让我很困惑,有没有一种方法可以存储某些字段,而不会占用比其内容更多的存储空间,也不会妨碍其他字段的索引 我缺少什么?您正在查找'index'=>“not_analysisted'映射选项 此外,如果使用\u源代码,则不必指定存储=>fal
“index”:“no”
的字段没有索引,但仍然存储在索引中。
(请参见中的幻灯片5)
这应该和Lucene的未索引匹配,对吗
这让我很困惑,有没有一种方法可以存储某些字段,而不会占用比其内容更多的存储空间,也不会妨碍其他字段的索引
我缺少什么?您正在查找
'index'=>“not_analysisted'
映射选项
此外,如果使用
\u源代码,则不必指定存储=>false
选项。有两种方法将数据输入索引。索引和存储。索引一段数据意味着它被标记化,并放置在反向索引中,并且可以进行搜索。存储数据意味着它不会被标记化、分析或任何东西,也不会被添加到反向索引中。它以全文形式存储在一个完全独立的区域中。不能对其进行搜索,但可以通过其文档ID以其原始形式检索
典型的Lucene查询过程是查询索引数据,获取匹配文档的返回文档ID,然后使用这些文档ID检索这些文档的存储数据,并将其显示给用户
已编制索引但未存储的数据是可搜索的,但无法以原始形式检索
一旦您找到了一个命中,就可以检索已存储但未编入索引的数据,但不可搜索
可以搜索或检索索引和存储的数据
两者都不是的数据根本无法添加到索引中
这一点在。中有一点介绍。我不熟悉在stack exchange上发布,但相信我能帮上一点忙
这里有一些注意事项:
分析
因为您不想做额外的工作,所以应该设置“索引”:“否”
。这意味着该字段将不会通过任何标记器和过滤器运行
此外,当将查询指向特定字段时,将不可搜索:(无点击)
*这里的“url”是字段名
但是,该字段仍可以在\u all
字段中搜索(可能有点击)
\u所有
字段
默认情况下,每个字段都放在\u all
字段中。设置“include\u in\u all”:“false”
以停止该操作。这可能不是您的问题,因为您不太可能错误地使用URL搜索\u all
字段
我使用的是一个模式,其中国家存储为两个字母的代码,例如:“否”表示挪威,可能有人会用“否”搜索所有字段,因此我确保设置“include\u in\u all”:“false”
注意:未明确指定字段的任何查询都将针对\u all
字段执行
储存
默认情况下,elasticsearch将存储您的整个文档(在发送时未分析),并将在hit的\u source
字段中返回给您。如果您关闭此选项(如果您的elasticsearch数据库可能变得巨大?),则需要显式设置“存储”:“yes”
,以单独存储字段。(需要注意的是,store
接受yes
或no
而不是true
或false
——这让我大吃一惊!)
注意:如果这样做,则需要请求显式返回给您的字段。e、 g:
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
}
}
来源:我犯了一个错误,写了“存储”而不是“索引”,修复了它。我想要的是能够检索url,但不能根据它进行过滤,当然也不能对其进行分析。我的困惑是,“不是索引而是存储在索引中”这句话太棒了!!!如果我理解正确,将分析并索引\u all
字段中的任何内容。因此,如果我使用“index”:“no”
,但忘记设置“include_in_all”:“false”,那么该字段实际上将被索引,从而导致数据库大小大幅增加?实际上,我错了,如果您设置“index”:“no”
,它似乎也设置了“include_in_all”:“false”
。但是,您似乎可以同时设置{“index”:“no”,“include_in_all”:“true”}
,并且在使用确切字符串查询\u all
字段时,您将看到一个小技巧。基于ElasticSearch 6+构建的索引没有“u all”字段。
curl -XGET http://path/index_name/type_name/id?fields=url,another_field
"type_name": {
"properties": {
"url": {
"type": "string",
"index": "no",
"include_in_all": "false"
},
// other fields' mappings
}
}