弹性搜索:如何搜索以某些字符开头的字符串

Chetan Nage

我想从弹性搜索中搜索数据,其中数据从头n个字符开始匹配。

以下是我进入ES索引的数据集/数据

{
    "took": 0,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 47,
            "relation": "eq"
        },
        "max_score": 1,
        "hits": [
            {
                "_index": "search_suggestions",
                "_type": "_doc",
                "_id": "VW5pdGVkIFN0YXRlcw==",
                "_score": 1,
                "_source": {
                    "id": "VW5pdGVkIFN0YXRlcw==",
                    "name": "India",
                    
                }
            },
            {
                "_index": "search_suggestions",
                "_type": "_doc",
                "_id": "RW1iYXNzeSBvZiB0aGUgViwgREMsIFVTQQ==",
                "_score": 1,
                "_source": {
                    "id": "RW1iYXNzeSBvZiB0aGUgViwgREMsIFVTQQ",
                    "name": "Maharashtra, India",
                }
            },
            {
                "_index": "search_suggestions",
                "_type": "_doc",
                "_id": "TWFoaSBCYXpB",
                "_score": 1,
                "_source": {
                    "id": "TWFoaSBCYXpB",
                    "name": "Pune, Maharashtra, India",
                 }
            }
        ]
    }
}

我已经尝试通过使用查询/术语/前缀/通配符方法进行搜索。我想查找以“ Ind *”开头的名称,但作为响应,它返回的字符串在字符串中的任何位置都匹配。我只想要以“ Ind *”开头的结果,而其他则不是。

请提出如何查询ES以获得高于预期结果的方法。

ESCoder

作为响应,查询将返回在字符串中任何位置都匹配的字符串,因为该字符串被分成单独的令牌(基于标准分析器)。因此,它将匹配包含印度的所有文档,这些文档在任何位置都可以,而不仅仅是在name字段开始时

分析API

{
  "analyzer" : "standard",
  "text" : "Maharashtra, India"
}

生成以下令牌:

{
  "tokens": [
    {
      "token": "maharashtra",
      "start_offset": 0,
      "end_offset": 11,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "india",
      "start_offset": 13,
      "end_offset": 18,
      "type": "<ALPHANUM>",
      "position": 1
    }
  ]
}

要实现用例,您需要将name字段设置keywordtype

索引映射:

{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      }
    }
  }
}

搜索查询:

{
  "query": {
    "prefix": {
      "name": {
        "value": "Ind"
      }
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "65119778",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "id": "VW5pdGVkIFN0YXRlcw==",
          "name": "India"
        }
      }
    ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

弹性搜索查询字符串请求

字符串范围查询[弹性搜索]

如何在bash中用grep搜索以“:”开头的字符串?

python搜索以字母开头的字符串

搜索以特定字符串结尾的 Id 的弹性搜索

PHP弹性搜索过滤查询字符串搜索

如何搜索以已知子字符串开头的子字符串

如何搜索字符串中的字符?

弹性搜索查询字符串数据类型

弹性搜索结合短语和子字符串查询

弹性搜索全字符串匹配不起作用

弹性搜索查询字符串的解析器

在弹性搜索中定义字符串数组字段

弹性搜索:字符串数组上的完全匹配查询

在弹性搜索中按字段的子字符串分组

Android Room查询:文本与搜索字符串完全匹配或以搜索字符串开头

MySQL:如何在字符串开头搜索和替换字符

如何在搜索字符串中搜索任何字符?

在C ++中从字符串中搜索并删除某些字符

如何从索引中所有可用文档的弹性搜索数组中删除空字符串?

弹性搜索按查询更新如何处理日期字段(从字符串解析?)

如何在弹性搜索的文本中使用 - 查询字符串

如何在弹性搜索中查询不区分大小写的字符串

如何在基于字符串字段的弹性搜索中更新

搜索以字符串开头的元素的列表的最快方法?

Spark Data frame搜索列以字符串开头

在vim中搜索以模式开头和结尾的字符串

搜索单词的开头和结尾的子字符串

我要搜索的字符串以通配符开头和结尾