在弹性搜索中搜索给定查询中的所有唯一术语

时间:2018-02-21 19:02:41

标签: elasticsearch

我正在尝试搜索test_nested索引中的所有唯一名称。

获取test_nested / _mappings

{
  "test_nested": {
    "mappings": {
      "my_type": {
        "properties": {
          "group": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "user": {
            "type": "nested",
            "properties": {
              "name": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

获取test_nested / _search

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 4,
    "max_score": 1,
    "hits": [
      {
        "_index": "test_nested",
        "_type": "my_type",
        "_id": "AWG5iVBz4bQsVnslc9gL",
        "_score": 1,
        "_source": {
          "group": "fans",
          "user": [
            {
              "name": "Linux"
            },
            {
              "name": "Android (operating system)"
            },
            {
              "name": "Widows 10"
            }
          ]
        }
      },
      {
        "_index": "test_nested",
        "_type": "my_type",
        "_id": "AWG5ieKW4bQsVnslc9gM",
        "_score": 1,
        "_source": {
          "group": "fans",
          "user": [
            {
              "name": "Bitcoin"
            },
            {
              "name": "PHP"
            },
            {
              "name": "Microsoft Windows"
            }
          ]
        }
      },
      {
        "_index": "test_nested",
        "_type": "my_type",
        "_id": "AWG5irrV4bQsVnslc9gN",
        "_score": 1,
        "_source": {
          "group": "fans",
          "user": [
            {
              "name": "Windows XP"
            }
          ]
        }
      },
      {
        "_index": "test_nested",
        "_type": "my_type",
        "_id": "1",
        "_score": 1,
        "_source": {
          "group": "fans",
          "user": [
            {
              "name": "iOS"
            },
            {
              "name": "Android (operating system)"
            },
            {
              "name": "Widows 10"
            },
            {
              "name": "Widows XP"
            }
          ]
        }
      }
    ]
  }
}

我想要一个术语的所有唯一名称。即如果我搜索“wi ”*那么我应该 [Microsoft Windows,Widows 10,Windows XP]

2 个答案:

答案 0 :(得分:0)

我不确切地知道你的意思,但我使用该查询列出了所有状态:

GET order/default/_search
{
  "size": 0,
  "aggs": {
    "status_terms": {
      "terms": {
        "field": "status.keyword",
        "missing": "N/A",
        "min_doc_count": 0,
        "order": {
          "_key": "asc"
        }
      }
    }
  }
}

我的模型有状态字段,该查询列出了所有状态。

这是bucket aggregations

结果中的一个字段是: sum_other_doc_count - 弹性返回顶部唯一术语。因此,如果您有许多不同的术语,那么其中一些术语将不会出现在结果中。该字段是不属于响应的文档总和。

对于嵌套对象,请尝试阅读并使用Nested Query docs

答案 1 :(得分:0)

我找到了解决方案。希望它可以帮到某人。

GET record_new/_search
{
  "size": 0,
  "query": {
    "term": {
      "software_tags": {
        "value": "windows"
      }
    }
  },
  "aggs": {
    "software_tags": {
      "terms": {
        "field": "software_tags.keyword",
        "include" : ".*Windows.*",
        "size": 10000,
        "order": {
          "_count": "desc"
        }
      }
    }
  }
}