Java elasticsearch中基于QueryBuilders的查询,用于跨多个字段搜索混合了特殊字符(John one)的文本?
我在应用程序中使用此查询从数据库集合的所有字段中获取所有不带特殊字符的匹配记录。在这里,我将Java elasticsearch中基于QueryBuilders的查询,用于跨多个字段搜索混合了特殊字符(John one)的文本?,java,
elasticsearch,Java,
elasticsearch,我在应用程序中使用此查询从数据库集合的所有字段中获取所有不带特殊字符的匹配记录。在这里,我将q值作为运行时搜索文本(John)。现在的问题是,当我搜索带有特殊字符的文本(John One)时,它返回0 QueryBuilder queryBuilderForUserSearch = QueryBuilders.boolQuery().must(QueryBuilders.fieldQuery("active", Boolean.TRUE)) .must(QueryBuilders.fi
q
值作为运行时搜索文本(John)
。现在的问题是,当我搜索带有特殊字符的文本(John One)
时,它返回0
QueryBuilder queryBuilderForUserSearch =
QueryBuilders.boolQuery().must(QueryBuilders.fieldQuery("active", Boolean.TRUE))
.must(QueryBuilders.fieldQuery("_all", "*" + q + "*"));
这里
q
是我传递的文本。当我只传递文本(如John
)而不传递特殊字符(如johnone
)时,它工作正常。但是我也应该获取所有带有特殊字符的记录。问题是,当遇到特殊字符时,elasticsearch会在索引时标记数据
尝试将字段标记为“未分析”。这将在索引中“按原样”存储字段值,而不标记它。这将导致一个副作用,即没有通配符的常规术语查询将无法按预期工作
相关映射片段
{
"field1":{
"type":"string",
"index":"not_analyzed",
"store":true
},
"field2":{
"type":"string",
"index":"not_analyzed",
"store":true
}
}
@谢谢你的编辑。