【发布时间】:2018-08-16 12:58:20
【问题描述】:
我开始使用 hibernate-search-elasticsearch(5.8.2),因为它似乎很容易集成,无需编写任何代码即可保持 elasticsearch 索引保持最新。这是一个很酷的库,但我开始认为它实现了一小部分弹性搜索功能。我正在执行一个带有无痛脚本过滤器的查询,该过滤器需要访问一个字符串字段,该字段在索引映射中是“文本”,如果不启用字段数据,这是不可能的。但我不太热衷于启用它,因为它会消耗大量堆内存。在我的案例中,弹性搜索团队建议这样做:
在启用 fielddata 之前,请考虑为什么要使用文本字段进行聚合、排序或在脚本中。这样做通常没有意义。
在索引之前分析文本字段,以便可以通过搜索 new 或 york 找到像 New York 这样的值。当您可能需要一个名为 New York 的存储桶时,此字段上的 terms 聚合将返回一个新存储桶和一个 york 存储桶。
相反,您应该有一个用于全文搜索的文本字段,以及一个为聚合启用 doc_values 的未分析关键字字段,如下所示:
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"my_field": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
}
不幸的是,我找不到使用 hibernate-search 注释的方法。有人可以告诉我这是否可行,或者我必须迁移到 vanilla elasticsearch 库而不使用任何包装器?
【问题讨论】:
标签: java elasticsearch hibernate-search