休眠搜索:无法对动态映射的字段文本字段执行通配符搜索



我实现了一个自定义桥,它将所有动态字段与相关类型映射。类型可以是 FieldType.STRING 或 FieldType.DOUBLE 或 FieldType.BOOLEAN,具体取决于值。

当我查看弹性搜索架构上的映射时,所有字符串字段都使用 TEXT 类型映射,我希望它是一个关键字,以便我可以执行通配符 serach。

这是我的问题,我想为动态映射字段"属性.动态字段-1"过滤"AAA-VALUE">

我有一个索引值为"AAA-VALUE",用于动态映射字段"属性.动态字段-1">

如果我想进行关键字搜索,我遇到了诸如"找不到字段桥"之类的错误,然后我通过使用ignoreFieldBridge忽略桥来解决错误,并且错误消失了。

然后我再次尝试使用值为"AAA-VALUE"进行搜索,结果为空(未找到数据(。在这里,我使用 keyword(( 查询创建了查询。

然后我再次尝试进行短语查询,然后它得到了工作,但问题是我如何进行通配符搜索,例如">-VALUE"。

关于代码,我遵循了此处给出的类似实现 https://github.com/hibernate/hibernate-search/blob/master/legacy/engine/src/test/java/org/hibernate/search/test/bridge/MultiFieldMapBridge.java

在我的实现中,只有类型不同,其中类型可以是字符串、布尔值或双精度值。

我的休眠搜索版本 - 休眠搜索版本和休眠搜索弹性搜索 = 5.11.3.Final

在进行以下更改后,它开始工作。

这是我之前添加字段的方式

public class MultiFieldMapClassBridge implements MetadataProvidingFieldBridge {
;
;
;
luceneOptions.addFieldToDocument( fieldPrefix + "." + key, value, document );
}

但是字段应添加如下。

public class MultiFieldMapClassBridge implements MetadataProvidingFieldBridge {
;
;
org.apache.lucene.document.Field field = new org.apache.lucene.document.StringField(fieldPrefix + "." + key, value,  luceneOptions.getStore());
document.add(field);
}

我编写了通配符查询,如下所示

queryBuilder.keyword().wildcard().onField(prefixedPath).ignoreFieldBridge().matching(String.format("*%s*", matchingString.toLowerCase(Locale.getDefault()))).createQuery();

在阅读了这个文档后,我意识到了这一点,其中类桥必须将字段添加为 StringField。 https://docs.jboss.org/hibernate/search/5.5/reference/en-US/html_single/#example-class-bridge