两种搜索方式?
我正在使用Elasticsearch 5.2的项目中工作。该代码在Java中,我使用elasticsearch Java Client 5.2。
在这个项目中,我有一个名为hash的字段,它是一个7个字符的代码,其中包含大写字母,小写字母和数字(英语)。我要在此字段上进行两次搜索:
- 检查是否存在哈希 - "ErTg1Qh"(区分大小写)
- 查找子字符串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








