【发布时间】:2026-02-27 01:50:02
【问题描述】:
我们有以下要求
作为搜索的一部分,用户可以搜索某人的出生日期。一般来说,用户从前端的日期选择器中选择它可以正常工作,并且搜索按预期工作。
但是我们现在有一个要求,用户可能不知道确切的出生日期,例如他们可能只知道出生年份。
我尝试过的
@Basic
@Field
@Field(name = "dob_string", bridge = @FieldBridge(impl = CustomDateStringBridge.class)
,analyzer = @Analyzer(definition = "dob_string_analyzer"))
@Column(name = "date_of_birth")
private Date dateOfBirth;
CustomDateStringBridge 类只是将日期作为字符串返回,例如 19780418,它按预期工作。
问题是当我们尝试查询 dob_string 字段时
我们将以下内容作为整体查询的一部分
partialDOB = DIGIT_ONLY_PATTERN.matcher(partialDOB).replaceAll("");
bool.must(queryBuilder.keyword()
.wildcard()
.onField("datesOfBirth.dob_string")
.ignoreFieldBridge()
.ignoreAnalyzer()
.matching("*"+partialDOB+"*")
.createQuery());
但是这会导致以下错误
"type": "parse_exception",
"reason": "failed to parse date field [*1979*] with format [
strict_date_optional_time||epoch_millis]"
我尝试不使用 ignoreAnalyzer 和 ignoreFieldBridge,但最终出现不同的错误
只是想知道是否可以在日期上进行这种类型的通配符搜索?如果有人知道如何做到这一点。
谢谢
【问题讨论】:
-
我遇到了类似的问题(我的用户输入是年或月+年),但我的方法是解析应用程序中的输入,然后只使用 sql 函数
month()和year()
标签: hibernate elasticsearch hibernate-search