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

ユースケースに応じて、2 つのオプションがあります。

最初のオプション: ElasticSearch の全文検索機能を利用したい場合は、match代わりに文字列を検索するために使用できます。term

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

2 番目のオプション:nameインデックスをマッピングするときにフィールドを指定することもできます。not analyzedこれにより、ElasticSearch は常にそれをそのまま保存し、常に正確な一致を取得します。

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