两种搜索方式?

我正在使用Elasticsearch 5.2的项目中工作。该代码在Java中,我使用elasticsearch Java Client 5.2。

在这个项目中,我有一个名为hash的字段,它是一个7个字符的代码,其中包含大写字母,小写字母和数字(英语)。我要在此字段上进行两次搜索:

  1. 检查是否存在哈希"ErTg1Qh"(区分大小写)

  2. 查找子字符串s中包含的哈希(例如,子字符串"tg"存在于hash中"ErTg1Qh")。

对于哈希字段,我选择了关键字数据类型。

我使用matchQuery函数进行首次搜索,如下所示:

String hash = "ErTg1Qh";    

QueryBuilders.matchQuery("hash", hash)

和queryStringQuery函数用于第二次搜索,如下所示:

queryString = "hash:*" + subString + "*";    

QueryBuilders.queryStringQuery(queryString)

但是,第二个不能正常工作。

如何在字段上处理这两种搜索?

回答:

您的一个查询要求区分大小写,而第二个查询则不区分大小写。因此,我建议您将子字段用作哈希字段。您的主字段将使用小写分析器进行分析,一个主字段将存储原始数据,即确切的哈希。因此,您的索引如下所示:

PUT /test

{

"settings": {

"number_of_shards": "1",

"number_of_replicas": "0",

"analysis": {

"analyzer": {

"custom_lowercase": {

"filter": [

"lowercase"

],

"type": "custom",

"tokenizer": "keyword"

}

}

}

},

"mappings": {

"_doc": {

"properties": {

"hash": {

"type": "text",

"analyzer": "custom_lowercase",

"fields": {

"keyword": {

"type": "keyword"

}

}

}

}

}

}

}

查询以检查是否存在哈希“ ErTg1Qh”(区分大小写)

POST /test/_doc/_search

{

"query": {

"match": {

"hash.keyword": "ErTg1Qh"

}

}

}

查询以查找子字符串s中包含的哈希

POST /test/_doc/_search

{

"query": {

"query_string": {

"query": "*tg*"

}

}

}

以上是 两种搜索方式? 的全部内容, 来源链接: utcz.com/qa/406046.html

回到顶部