在elasticsearch中基于QueryBuilders的查询,用于在多个字段中搜索混有特殊字符(John-one)的文本?

时间:2013-11-21 14:23:56

标签: java elasticsearch

我在我的应用程序中使用此查询来获取我的数据库集合的所有字段中没有特殊字符的所有匹配记录。我将q值作为运行时搜索文本(John)传递。现在问题是当我搜索带有特殊字符的文本(John-One)时,它会返回0

QueryBuilder queryBuilderForUserSearch =
QueryBuilders.boolQuery().must(QueryBuilders.fieldQuery("active", Boolean.TRUE))
     .must(QueryBuilders.fieldQuery("_all", "*" + q + "*"));

这里q是我传递的文字。当我只传递没有特殊字符(如John)的文本(如John-one)时,它工作正常。但是我也应该用特殊字符获取所有记录。

1 个答案:

答案 0 :(得分:0)

问题是,当遇到特殊字符时,elasticsearch会在索引时对数据进行标记。

尝试将字段标记为“not_analyzed”。这将在索引中“按原样”存储您的字段值,而不会对其进行标记。这将导致您的正常术语查询的副作用,没有通配符将无法按预期工作。

相关的地图摘要。

{
   "field1":{
        "type":"string",
        "index":"not_analyzed",
        "store":true
    },
    "field2":{
        "type":"string",
        "index":"not_analyzed",
        "store":true
    }
}