0

我正在使用以下代码通过弹性搜索 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();
4

1 回答 1

0

根据您的用例,您有两种选择。

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

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

第二个选项:您还可以指定该name字段是not analyzed在映射索引时,因此 ElasticSearch 将始终按原样存储它并始终获得完全匹配。

"mappings": {
    "user": {
        "properties": {
            "name": {
                "type": "string"
                "index": "not_analyzed"
            }
        }
    }
}
于 2015-12-12T18:20:31.827 回答