elasticsearch - 通过 Elasticserach Query DSL 在 Kibana 中查找列表中的所有条目
问题描述
你能帮我解决这个问题吗?“发现”中的我的 Kibana 数据库包含交易列表。我知道想在这个数据库中找到所有在特定工具(ISIN 编号)中完成的交易。当我手动添加过滤器并切换到 Elasticserach Query DSL 时,我发现以下内容:
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"obdetails.isin": "CH0253592783"
}
},
{
"match_phrase": {
"obdetails.isin": "CH0315622966"
}
},
{
"match_phrase": {
"obdetails.isin": "CH0357659488"
}
}
],
"minimum_should_match": 1
}
}
}
由于我想检查数据库中超过 200 个 ISINS,这似乎效率低下。有没有一种方法,我可以说“如果它包含以下 200 个 ISIN 之一,请告诉我交易?”。
我已经用谷歌搜索并尝试了这个,但没有奏效:
{
"query": {
"terms": {
"obdetails.isin": [ "CH0357659488", "CH0315622966"],
"boost": 1.0
}
}
}
查询有效,但不显示任何结果。
解决方案
总结。分析一个类型的字段,text
它基本上使用给定的分析器等将给定的数据转换为术语列表,而不是单个术语。给定的行为会导致术语查询与这些值不匹配。
可以添加一个额外的 type 字段,而不是更改字段的类型keyword
。这样,可以执行术语查询,同时仍然具有在字段上匹配的能力。
{
"isin": {
"type" "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
obdetails.isin.keyword
上面的示例将添加一个称为可用于术语的额外字段。虽然仍然能够使用匹配查询obdetails.isin
推荐阅读
- python-asyncio - 使用 asyncio.Queue() 时如何取消获取?
- javascript - 从比较中列出清单
- javascript - DiscordJS:检查输入是否在字符串中
- php - MySQLi 已启用但未在 Windows Server 2008 中加载
- node.js - 如何在 node.js 中的一台服务器上运行多个多人游戏(服务器)
- python - list1 在我的代码中的任何地方都不会被分配等于 list2,但是 list1 的值仍然被复制到 list2
- android - 当只有一个建议时,AutoCompleteTextView 建议隐藏在键盘下
- javascript - 更新 async forEach 以根据来自另一个集合的属性更新每个文档属性
- javascript - 使用地图获取数组中每个项目的数量
- reactjs - 如何使用 React 的 CSSTransitionGroup 淡入/淡出我的警报消息?