elasticsearch - 如何在Elasticsearch的查询或过滤器中从特定文档类型指定或定位字段?

标签 elasticsearch

给出:

  • 两种不同类型的文档(例如“产品”和“类别”)被索引到相同的Elasticsearch索引。
  • 两种文档类型都有一个“标签”字段。

  • 问题:

    我想建立一个查询,返回两种类型的结果,但是类型为“product”的文档允许使用标签“X”和“Y”,类型为“category”的文档只能使用标签“Z” '。我该如何实现?看来我不能使用product.tags和category.tags,因为ES会查找文档的product / category字段,这不是我想要的。

    注意:

    虽然对于上面的示例可能有某种解决方法,但我正在寻找一种在编写查询时定位或指定特定文档类型的字段的通用方法。我基本上想对查询中使用的字段名称进行“命名空间”,因此仅考虑要使用的类型的文档。

    最佳答案

    我认为字段别名将是您的最佳选择,但这是不可能的。
    相反,您可以使用“copy_to”,但它可能会影响索引大小:

    DELETE /test
    PUT /test
    {
          "mappings": {
              "product" : {
                  "properties": { 
                    "tags": { "type": "string", "copy_to": "ptags" },
                    "ptags": { "type": "string" }
                }
                },
              "category" : {
                  "properties": { 
                    "tags": { "type": "string", "copy_to": "ctags" },
                    "ctags": { "type": "string" }
                }
            }
        }
    }
    
    PUT /test/product/1
    { "tags":"X" }
    PUT /test/product/2
    { "tags":"Y" }
    PUT /test/category/1
    { "tags":"Z" }
    

    您可以查询一个或多个字段:
    GET /test/product,category/_search
    {
        "query": {
            "term": {
               "ptags": {
                  "value": "x"
               }
            }
        }
    }
    
    GET /test/product,category/_search
    {
        "query": {
            "multi_match": {
            "query":      "x",
            "fields":     [ "ctags", "ptags" ]
            }
        }
    }
    

    关于elasticsearch - 如何在Elasticsearch的查询或过滤器中从特定文档类型指定或定位字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36911358/

    相关文章:

    elasticsearch - 使用 elasticsearch 计算不同的值

    elasticsearch - 使用ElasticSearch搜索时指定索引黑名单

    php - Elastic Search 对多个字段进行模糊匹配,并对多个字段组合得分进行排序

    python - 使用 Elasticsearch 后端在 Django Haystack 中启用同义词

    scala - 如何在Spark和Elasticsearch中迭代hadoop MapWritable

    curl - Elasticsearch:如何查询连接数?

    elasticsearch - 仅返回elasticsearch原生查询Java api中的特定字段

    Elasticsearch 5 - 文本/关键字字段中不区分大小写的精确匹配

    elasticsearch - Elasticsearch匹配类型数组字段中的确切单词

    json - 如何在Elasticsearch中将xml存储为字段?