gpt4 book ai didi

elasticsearch - Elasticsearch bool must_not不适用于多字段。

转载 作者:行者123 更新时间:2023-12-03 01:02:39 24 4
gpt4 key购买 nike

我使用多字段https://www.elastic.co/guide/en/elasticsearch/reference/current/_multi_fields.html

这是我的映射的一部分:

...
"Diagnosis": {
"type": "string",
"fields":{
"not_analyzed":{
"type":"string",
"index":"not_analyzed"
}
}
}
...

我运行此查询:
curl -XGET 'elasticsearch_server:9200/db-index/Diagnosis/_search?pretty' -d '{"query": {"bool": {"must_not": [{"match": {"Diagnosis.not_analyzed": "F06.4 - Organic anxiety disorder"}}], "must": [{"match": {"Diagnosis": "Dementia disease disorder"}}]}}}'

尽管必须使用must_not子句,但上述查询在其他结果中仍返回“ F06.4-器质性焦虑症”字符串。

我可以用“焦虑”一词排除所有结果
curl -XGET 'elasticsearch_server:9200/db-index/Diagnosis/_search?pretty' -d '{"query": {"bool": {"must_not": [{"match": {"Diagnosis": "anxiety"}}], "must": [{"match": {"Diagnosis": "Dementia disease disorder"}}]}}}'

但是目标是从结果中仅排除确切的字符串“ F06.4-器质性焦虑症”。
我怎样才能做到这一点?

最佳答案

试试这个
1)将映射更改为小写数据,但不要按字切割(默认映射)

curl -XPUT 'localhost:9200/...../' -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" : {

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

}
}
}
}

2)这将仅返回不包含“器官焦虑症”的数据(其中 *可以是任何单词)
{
"query" : {
"bool" : {
"must_not" : [{
"wildcard" : {
"Diagnosis" : {
"value" : "*organic anxiety disorder*"
}
}

}
]
}
}
}

3)使用严格搜索排除数据:
{
"query" : {
"bool" : {
"must_not" : [{
"term" : {
"Diagnosis.not_analyzed" : "f06.4 - organic anxiety disorder"
}
}
]
}
}
}

关于elasticsearch - Elasticsearch bool must_not不适用于多字段。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35268891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com