嵌套术语 ElasticSearch 7 问题/Elastica 不起作用 - 初学者

Nested Term ElasticSearch 7 problem / Elastica Don't work - BEGINNER

我试图在 ElasticSearch 的嵌套元素中使用 slug 进行精确搜索,但它似乎不起作用。

所以当我尝试使用 "my-slug" 进行简单的嵌套 匹配 时,我得到的结果是 “我的”“slug”,正常...

GET my-index/_search
  
  {
      "query": {
        "nested": {
          "path": "productTranslation",
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "productTranslation.slug": "my-slug"
                  }
                }
              ]
            }
          }
        }
      }
    }

但是我尝试使用字词或过滤器搜索时没有结果。

GET my-index/_search
{
  "query": {
    "nested": {
      "path": "productTranslation",
      "query": {
        "bool": {
          "filter": [
            {
              "term": {
                "productTranslation.slug": "my-slug"
              }
            }
          ]
        }
      }
    }
  }
}

知道错误在哪里吗??

感谢您的帮助。

词条查询不对词条执行任何分析。因此,在 term query 中,您需要进行完全匹配。

如果您没有明确定义任何映射,则需要将 .keyword 添加到 productTranslation.slug 字段。这使用关键字分析器而不是标准分析器(注意 productTranslation.slug 字段后的“.keyword”)。

{
  "query": {
    "nested": {
      "path": "productTranslation",
      "query": {
        "bool": {
          "filter": [
            {
              "term": {
                "productTranslation.slug.keyword": "my-slug"  // note this
              }
            }
          ]
        }
      }
    }
  }
}

或者您可以将 productTranslation.slug 字段的数据类型更改为关键字类型

{
  "mappings": {
    "properties": {
      "productTranslation": {
        "properties": {
          "slug": {
            "type": "keyword"
          }
        }
      }
    }
  }
}