你能在这方面帮我一下吗?我在“发现”中的Kibana数据库包含一个交易列表。我知道要找到在这个数据库中的所有交易,已在特定的工具(ISIN-编号)。当我手动添加过滤器并切换到Elasticserach查询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
}
}
}
查询可以工作,但不会显示任何结果。
发布于 2021-07-14 18:51:34
总结一下。分析类型为text
的字段,它基本上使用给定的分析器将给定数据转换为术语列表,而不是单个术语。给定的行为会导致术语查询与这些值不匹配。
可以添加类型为keyword
的附加字段,而不是更改字段的类型。这样,可以执行术语查询,同时仍然具有在字段上匹配的能力。
{
"isin": {
"type" "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
上面的示例将添加一个名为obdetails.isin.keyword
的额外字段,该字段可用于术语。同时仍然能够在obdetails.isin
上使用匹配查询
https://stackoverflow.com/questions/68374858
复制相似问题