我使用多字段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 - 有机焦虑症"从结果。 我怎么能这样做?
答案 0 :(得分:1)
如果要排除精确字符串,请使用term query
之类的。{/ p>
curl -XGET 'elasticsearch_server:9200/db-index/Diagnosis/_search? pretty' -d '{"query": {"bool": {"must_not": [{"term": {"Diagnosis.not_analyzed": "F06.4 - Organic anxiety disorder"}}], "must": [{"match": {"Diagnosis": "Dementia disease disorder"}}]}}}'
希望这有帮助
答案 1 :(得分:1)
试试这个 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"
}
}
]
}
}
}