弹性组合必须和不得

wz1wpwve  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(2)|浏览(347)

我想在elastic中创建一个查询,从中获取与某个值匹配但没有特定字段的所有文档:我尝试执行以下操作:

  1. {
  2. "query": {
  3. "bool": {
  4. "must": [
  5. {
  6. "match": {
  7. "some-field.b": true
  8. }
  9. },
  10. {
  11. "bool": {
  12. "must_not": {
  13. "exists": {
  14. "field": "some-other-field.a"
  15. }
  16. }
  17. }
  18. }
  19. ]
  20. }
  21. }
  22. }

即使我在elastic中更改了一个文档,并给了某个其他字段一个值,查询也会不断返回相同的总命中数。知道为什么会这样吗?
我发现改变这一点的唯一方法是在查询中添加最低分数,但我不确定我是否真正理解分数的概念。只有在两个条件都满足的情况下,我才想要这些文件。
我注意到另一件事。如果我在有最低分数的情况下重复查询,则返回的命中数会有所不同。

vs91vp4v

vs91vp4v1#

因为您没有提到任何有关Map和索引数据的内容。
添加索引Map、索引数据和搜索查询的工作示例(将数据视为嵌套类型) some-other-field.a 看起来像一个嵌套字段)
索引Map:

  1. {
  2. "mappings": {
  3. "properties": {
  4. "user": {
  5. "type": "nested"
  6. },
  7. "qualification": {
  8. "type": "nested"
  9. }
  10. }
  11. }
  12. }

索引数据:

  1. {
  2. "user" : [
  3. {
  4. "first" : "Bhavya",
  5. "last" : "Gupta"
  6. }
  7. ]
  8. }
  9. {
  10. "user" : [
  11. {
  12. "first" : "Bhavya",
  13. "last" : "Gupta"
  14. }
  15. ],
  16. "qualification": [
  17. {
  18. "degree": "MTech"
  19. }
  20. ]
  21. }
  22. {
  23. "user" : [
  24. {
  25. "first" : "John",
  26. "last" : "Smith"
  27. }
  28. ],
  29. "qualification": [
  30. {
  31. "degree": "BTech"
  32. }
  33. ]
  34. }

搜索查询:

  1. {
  2. "query": {
  3. "bool": {
  4. "must": [
  5. {
  6. "nested": {
  7. "path": "user",
  8. "query": {
  9. "bool": {
  10. "must": [
  11. {
  12. "match": {
  13. "user.first": "Bhavya"
  14. }
  15. }
  16. ]
  17. }
  18. }
  19. }
  20. }
  21. ],
  22. "must_not": {
  23. "nested": {
  24. "path": "qualification",
  25. "query": {
  26. "exists": {
  27. "field": "qualification.degree"
  28. }
  29. }
  30. }
  31. }
  32. }
  33. }
  34. }

搜索结果:

  1. "hits": [
  2. {
  3. "_index": "stof",
  4. "_type": "_doc",
  5. "_id": "3",
  6. "_score": 0.35667494,
  7. "_source": {
  8. "user": [
  9. {
  10. "first": "Bhavya",
  11. "last": "Gupta"
  12. }
  13. ]
  14. }
  15. }
  16. ]
展开查看全部
6xfqseft

6xfqseft2#

我需要的最后一个问题是:

  1. "query": {
  2. "bool": {
  3. "must": [
  4. {
  5. "match": {
  6. "some-field.b": true
  7. }
  8. }
  9. ],
  10. "must_not": {
  11. "nested": {
  12. "path": "some-other-field",
  13. "query": {
  14. "exists": {
  15. "field": "some-other-field.a"
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

看起来我的错误是查询的必不可部分,因为some other字段是嵌套字段

展开查看全部

相关问题