gpt4 book ai didi

elasticsearch - 多字段与字段数据进行查询和排序

转载 作者:行者123 更新时间:2023-12-03 01:14:50 25 4
gpt4 key购买 nike

我有一个使用Elasticsearch 6的简单“人”数据库​​,基本上看起来像这样:

id | firstName | lastName
-------------------------
1 | Tim | Berners-Lee
2 | Linus | Torvalds
3 | Noam | Chomsky
我想按 lastName(和/或 firstName-取决于用户输入)进行查询和排序。
现在,我找到了两个似乎可行的解决方案,但是我不确定哪个是“正确”(或“更好”)的,以及原因:
  • 多字段:"type": "text", "fields": { "raw": { "type": "keyword" } }:我可以使用lastName进行查询并使用lastName.raw进行排序。
  • fielddata:"type": "text", "fielddata": true:在这里我可以使用lastName进行查询和排序。

  • 但是我完全不确定为什么我应该选择一个而不是另一个,以及这种选择有什么含义。

    最佳答案

    希望以下几点将帮助您根据实际用例做出决定。

  • 多字段
    它的目的-使用不同的分析器存储单个字段。如您所使用的textkeyword它没有任何特殊的缓存。
  • 现场数据
    它的目的-在聚合/排序期间更快地访问。它将所有数据加载到字段缓存。
    尽管您可以使用它满足您的需求,但是它很昂贵。
  • 加载字段数据非常昂贵
  • 一旦加载,它将在Lucene段的生命周期内保持不变
  • 由于您的字段是文本,因此它将占用大量堆空间。


  • 但是您可以使用 fielddata_frequency_filter控制加载到内存中的术语数
    然后您对 text字段进行排序。该文件的建议是

    Instead, you should have a text field for full text searches, and an unanalyzed keyword field with doc_values enabled for aggregations


    因此,您需要根据数据大小,数据访问模式,服务器成本进行选择,以防万一您有更多数据并计划使用 field data

    关于elasticsearch - 多字段与字段数据进行查询和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63030742/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com