带有NativeSearchQueryBuilder空格和大写的elasticsearch

时间:2015-12-12 15:43:44

标签: elasticsearch spring-data-elasticsearch elasticsearch-java-api elasticsearch-template

我正在使用以下代码通过弹性搜索java api进行过滤,如果我使用字符串查询,它工作正常并返回结果,但如果我使用带空格或大写字母的文本则不返回任何数据

如果使用

    String query={"bool":{"should":[{"term":{"name":"test"}}]}}

返回数据

如果我使用

  String query={"bool":{"should":[{"term":{"name":"test airportone"}}]}}  

  String query={"bool":{"should":[{"term":{"name":"TEST"}}]}}

不返回数据

String query={"bool":{"should":[{"term":{"name":"test airport one"}}]}}
BoolQueryBuilder bool = new BoolQueryBuilder();
    bool.must(new WrapperQueryBuilder(query));

SearchQuery searchQuery = new 
             NativeSearchQueryBuilder()
            .withQuery(bool)
            .build();
    Page<Asset> asset =
            elasticsearchTemplate.queryForPage(searchQuery,Asset.class);
        return asset.getContent();

1 个答案:

答案 0 :(得分:0)

根据您的使用情况,您有两种选择。

第一个选项:如果您想要利用ElasticSearch全文搜索功能,可以使用match代替term来搜索字符串。

{
    "bool": {
        "should": [{
            "match": {
                "name": "test airportone"
            }
        }]
    }
}

第二个选项:您还可以在映射索引时指定name字段为not analyzed,以便ElasticSearch始终按原样存储它并始终获得准确的匹配。

"mappings": {
    "user": {
        "properties": {
            "name": {
                "type": "string"
                "index": "not_analyzed"
            }
        }
    }
}