我有一个使用Elasticsearch 6的简单“人”数据库,基本上看起来像这样:
---------------------
...
Project
src
MyApp
__init__.py
__main__.py
FrameworkPackage1
__init__.py
sourcefile1.py
FrameworkPackage2
__init__.py
sourcefile2.py
setup.py
README.md
---------------------
我想按Y = zeros(5000,10);
for i = 1:5000
Y(i,y(i))=1;
end
(和/或id | firstName | lastName
-------------------------
1 | Tim | Berners-Lee
2 | Linus | Torvalds
3 | Noam | Chomsky
进行查询和排序-取决于用户输入)。
现在,我找到了2种似乎可行的解决方案,但是我不确定哪一种是“正确的”(或“更好的”)以及原因:
多字段:lastName
:我可以使用firstName
进行查询并使用"type": "text", "fields": { "raw": { "type": "keyword" } }
进行排序。
fielddata:lastName
:在这里,我可以使用lastName.raw
进行查询和排序。
但是我完全不确定为什么我应该选择一个,以及这种选择有什么含义。
答案 0 :(得分:1)
希望以下几点将帮助您根据实际用例做出决定。
多个字段
用途-使用不同的分析器存储单个字段。如您所使用的text
和keyword
它没有任何特殊的缓存。
字段数据
用途-在聚合/排序过程中提供更快的访问权限。它将所有数据加载到字段缓存。 尽管您可以使用它满足您的需求,但这很昂贵。
但是您可以使用fielddata_frequency_filter
您确实在text
字段上进行了排序。文件中的建议是
相反,您应该有一个用于全文搜索的文本字段,以及一个已启用doc_values进行汇总的未分析的关键字字段
因此,如果您有更多数据并计划使用field data