当前位置: 首页 > 面试题库 >

两种搜索方式?

裴经义
2023-03-14
问题内容

我正在使用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*"
    }
  }
}


 类似资料:
  • 问题内容: 我有一个用例,其中在同一索引中有两种不同的类型。两种类型都有不同的结构和映射。 我需要使用不同的查询DSL同时查询这两种类型。 如何构建查询DSL以同时查询多个相同索引类型。 我在https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-index- multi- type.html上 查看了Elasticsea

  • 我有一段说 我对代码的看法: 这是正确的做法吗??

  • 本文向大家介绍spring aop两种配置方式,包括了spring aop两种配置方式的使用技巧和注意事项,需要的朋友参考一下 第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Before, @AfterReturning,@After,@AfterThro

  • 本文向大家介绍JS实现表格数据各种搜索功能的方法,包括了JS实现表格数据各种搜索功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现表格数据各种搜索功能。可忽略大小写,模糊搜索,多关键搜索。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 我想尝试将以下两种方法合二为一: 第一个方法构造一个映射,其中键是<code>String</code>,值是<code<ArrayList</code>。 我想尝试添加第二条信息,即简单的错误消息(方法2)。HashMap不够复杂,无法保存这些信息,但我喜欢它只接受唯一值的方式,而且很容易迭代和传递。 任何建议非常感谢:)

  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!