elasticsearch 映射 tokenizer 关键字以避免分割标记并启用通配符

2023-11-27

例如,我尝试在给定字段上使用 angularjs 和 elasticsearch 创建自动完成功能countryname。它可以包含简单的名称,如“法国”、“西班牙”或“组合名称”,如“塞拉利昂”。

在映射中该字段是not_analyzed防止弹性标记“组合名称”

"COUNTRYNAME" : {"type" : "string", "store" : "yes","index": "not_analyzed" }

我需要查询elasticsearch:

  • 使用“countryname:value”之类的内容过滤文档,其中值可以包含通配符
  • 并对过滤器返回的国家/地区名称进行聚合,(我进行聚合以仅获取不同的数据,计数对我来说毫无用处,也许有更好的解决方案)

我不能在“not_analyzed”字段中使用通配符:

这是我的查询,但“value”变量中的通配符不起作用,并且区分大小写:

通配符仅是她的作品:

curl -XGET 'local_host:9200/botanic/specimens/_search?size=0' -d '{
  "fields": [
    "COUNTRYNAME"
  ],
  "query": {
    "query_string": {
      "query": "COUNTRYNAME:*"
    }
  },
  "aggs": {
    "general": {
      "terms": {
        "field": "COUNTRYNAME",
        "size": 0
      }
    }
  }
}'

但这不起作用(法郎*):

curl -XGET 'local_host:9200/botanic/specimens/_search?size=0' -d '{
  "fields": [
    "COUNTRYNAME"
  ],
  "query": {
    "query_string": {
      "query": "COUNTRYNAME:Franc*"
    }
  },
  "aggs": {
    "general": {
      "terms": {
        "field": "COUNTRYNAME",
        "size": 0
      }
    }
  }
}'

我也尝试过bool must query但不要使用此 not_analyzed 字段和通配符:

curl -XGET 'local_host:9200/botanic/specimens/_search?size=0' -d '{
  "fields": [
    "COUNTRYNAME"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "COUNTRYNAME": "Franc*"
          }
        }
      ]
    }
  },
  "aggs": {
    "general": {
      "terms": {
        "field": "COUNTRYNAME",
        "size": 0
      }
    }
  }
}'

我错过了什么或做错了什么?我应该离开球场吗analyzed在映射中并使用另一个分析器,该分析器不会将组合名称拆分为令牌?


我找到了一个可行的解决方案:“关键字”标记器。 创建一个自定义分析器并将其用于我想要保留而不用空格分割的字段的映射中:

    curl -XPUT 'localhost:9200/botanic/' -d '{
 "settings":{
     "index":{
        "analysis":{
           "analyzer":{
              "keylower":{
                 "tokenizer":"keyword",
                 "filter":"lowercase"
              }
           }
        }
     }
  },
  "mappings":{
        "specimens" : {
            "_all" : {"enabled" : true},
            "_index" : {"enabled" : true},
            "_id" : {"index": "not_analyzed", "store" : false},
            "properties" : {
                "_id" : {"type" : "string", "store" : "no","index": "not_analyzed"  } ,
            ...
                "LOCATIONID" : {"type" : "string",  "store" : "yes","index": "not_analyzed" } ,
                "AVERAGEALTITUDEROUNDED" : {"type" : "string",  "store" : "yes","index": "analyzed" } ,
                "CONTINENT" : {"type" : "string","analyzer":"keylower" } ,
                "COUNTRYNAME" : {"type" : "string","analyzer":"keylower" } ,                
                "COUNTRYCODE" : {"type" : "string", "store" : "yes","index": "analyzed" } ,
                "COUNTY" : {"type" : "string","analyzer":"keylower" } ,
                "LOCALITY" : {"type" : "string","analyzer":"keylower" }                 
            }
        }
    }
}'

所以我可以在 COUNTRYNAME 字段的查询中使用通配符,该字段未拆分:

curl -XGET 'localhost:9200/botanic/specimens/_search?size=10' -d '{
"fields"  : ["COUNTRYNAME"],     
"query": {"query_string" : {
                    "query": "COUNTRYNAME:bol*"
}},
"aggs" : {
    "general" : {
        "terms" : {
            "field" : "COUNTRYNAME", "size":0
        }
    }
}}'

结果 :

{
    "took" : 14,
    "timed_out" : false,
    "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
    },
    "hits" : {
        "total" : 45,
        "max_score" : 1.0,
        "hits" : [{
                "_index" : "botanic",
                "_type" : "specimens",
                "_id" : "91E7B53B61DF4E76BF70C780315A5DFD",
                "_score" : 1.0,
                "fields" : {
                    "COUNTRYNAME" : ["Bolivia, Plurinational State of"]
                }
            }, {
                "_index" : "botanic",
                "_type" : "specimens",
                "_id" : "7D811B5D08FF4F17BA174A3D294B5986",
                "_score" : 1.0,
                "fields" : {
                    "COUNTRYNAME" : ["Bolivia, Plurinational State of"]
                }
            } ...
        ]
    },
    "aggregations" : {
        "general" : {
            "buckets" : [{
                    "key" : "bolivia, plurinational state of",
                    "doc_count" : 45
                }
            ]
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

elasticsearch 映射 tokenizer 关键字以避免分割标记并启用通配符 的相关文章

随机推荐

  • 设备 emulator-5554 未获得授权。 (安卓)

    我遇到过类似的问题 emulator 5554 未经授权使用 adb 设备 1 基本上 我正在尝试使用 Windows 10 在 Android 虚拟设备上进行一些 flutter 编程 尽管我不认为这个问题是 flutter 特有的 启动
  • Git for Windows(64 位)中的 Maven classworlds.launcher.Launcher 错误

    我已经在 Git Bash 64 位 上使用 Maven 几个月了 突然它停止工作 并且现在在任何 Maven 命令上生成此错误 myuser mypc MINGW64 master mvn v Error Could not find o
  • SHA256 的“纯粹”方案实现(R5RS)?

    我可以在Scheme中使用SHA256 使用外部库 Java C或系统相关 或使用特定的Scheme实现 例如Chicken 但我想知道是否有一个 纯粹的 scheme实现 我今天写了一个实现 唉 R5RS 既没有字节向量也没有二进制 I
  • 为什么 WPF 中没有视觉继承?

    在 Windows 窗体中 让一个窗口继承另一个窗口有时很有用 但在WPF中 这是不允许的 为什么 WPF 窗口没有视觉继承 WPF 不支持视觉继承的原因是表单设计是通过标记 xaml 实现的 而不是使用代码隐藏来生成布局的 winform
  • xmllint DTD 验证语法

    尝试验证 XML 文档 但是 xmllint 坚持将选项作为文件读取 因此我收到 FileNotFound 异常 只是为了确认 我的 xmllint exe 与我的 XML 文件位于同一文件夹中 我在CMD中找到该目录并输入命令 xmlli
  • 在线共享和保护 Excel 文档(使用 Powerpivot),无需 Sharepoint 和 Power BI?

    我的一位客户制作了这份令人难以置信 而且非常巨大 的 Excel 文档 其中包含许多数据源 工作表 Powerpivot 表格 图表等 非常棒的工作 他希望与授权人员共享 但保护他有价值的内容 也称为数据源和文档 逻辑 例如 用户可以使用过
  • IdentityServer4 Net Core 2不调用自定义iProfileService

    我已将 Identity Server 项目升级到 Net Core 2 现在我无法调用 iProfileService 对象来添加自定义用户声明 它在 Net Core 1 中确实有效 Startup cs的ConfigureServic
  • 如何让 C 程序等待(在 Linux 上)?

    如何让 C 程序等待 在 Linux 上 我需要使用等待与 MPI 我需要 C 代码 如果要等待 MPI 请求 请使用 MPI Wait http www manpagez com man 3 MPI Wait 如果您想等待一定时间 请使用
  • gitk:奇怪的历史树

    我正在将 svn 存储库移植到 git 使用 svn2githttps www negativetwenty net redmine projects show svn2git 并且由于 svn 不跟踪合并 我需要手动编辑 git info
  • 为什么 .html() 不能与使用 jquery 的 SVG 选择器一起使用?

    Question有人可以告诉我如何将 SVG 元素转换为字符串吗 我在用着canvg将我的 SVG 转换为图像 它必须首先在画布中渲染 canvg 方法期待一个SVG STRING code function updateChartImag
  • 使用 Url 视图帮助链接时从 URL 中删除参数

    使用 Url view helper 构建链接时 如果当前页面的 url 中有参数 则 Url view helper 生成的 url 也会包含参数 例如在页面中 控制器 操作 参数 值 下面的代码 a href Dashboard a 将
  • 如何从WKInterfaceButton获取标题

    要获得标题 有函数 setTitle 但是如何将 WKInterfaceButton 的标题作为字符串获取 我没有找到任何东西https developer apple com library prerelease ios document
  • Python 2 中的类型提示

    In PEP 484 类型提示被添加到 Python 3 中 其中包括typing模块 在Python 2中有什么办法可以做到这一点吗 我能想到的就是有一个装饰器添加到方法中来检查类型 但这会在运行时失败 并且不会像提示所允许的那样更早被捕
  • AWS S3 中的“KeyError: 'Records'” - Lambda 触发器

    我有以下 lambda 函数代码 用于简单地打印 S3 存储桶的上传事件的作者和元数据 from future import print function import json import urllib import boto3 pri
  • 解析Robot Framework的输出xml

    机器人框架吐出一个输出 XML 然后用于构建 HTML 报告 带有rebot 重新运行失败等 我需要解析此文件以生成其他报告 特别是 我需要解析正则表达式的测试用例文档 获取测试用例结果 然后构建报告 这是为了与遗留系统集成 Robot F
  • 如何用新的 viewController 替换当前的 viewController

    我正在尝试用新的视图控制器替换当前的视图控制器 我之前已经能够做到这一点 但我遇到了一些 BAD ACCESS 问题 这是当我想用新视图替换当前视图时将运行的代码 该函数将使用本地属性 self some data 非原子 保留 调用 vo
  • 从 PySpark DataFrame 中的 Python 列表列表中删除元素

    我正在尝试从 Python 列表中删除一个元素 sources 62 7 32 62 18 36 62 7 31 36 62 7 32 62 我希望能够删除一个元素 rm 来自上面列表中的每个列表 我编写了一个可以对列表列表执行此操作的函数
  • MFC中多行cstatic文本垂直居中

    怎样才能制作一个CStatic文本自动换行 多行 将结果垂直居中在控件的矩形中 我试图解决的问题是 我有一个CStatic控制旁边的CComboBox根据选择更新信息文本 该文本可以短也可以长 需要CStatic有时使用多线 有时不使用 我
  • 如何将 mime 类型添加到 htaccess 文件?

    我在向服务器添加 mime 类型时遇到问题 这是我当前的 htaccess AuthUserFile usr local www pass htpasswd AuthType Basic AuthName Mockups
  • elasticsearch 映射 tokenizer 关键字以避免分割标记并启用通配符

    例如 我尝试在给定字段上使用 angularjs 和 elasticsearch 创建自动完成功能countryname 它可以包含简单的名称 如 法国 西班牙 或 组合名称 如 塞拉利昂 在映射中该字段是not analyzed防止弹性标