如何在 Elasticsearch 中按多个字段创建渗透索引

How to create percolate index in Elasticsearch by multiple fields

我有一个索引:产品

curl -XPUT "http://localhost:9200/products/product/1" -d'
{
    "title": "Iphone 6",
    "category_id": 4,
    "price": 7788,
    "owner_id": 21
}'

如何为 3 个字段创建过滤索引:标题、category_id、价格?

Percolate Query 在这里我只找到了如何处理 1 个字段。

创建具有两个映射的索引

curl -XPUT 'localhost:9200/percolate-index?pretty' -H 'Content-Type: application/json' -d'
{
    "mappings": {
        "doctype": {
            "properties": {
                "title": {
                    "type": "text"
                },
                "category_id": {
                    "type": "long"
                },
                "price": {
                    "type": "long"
                }
            }
        },
        "queries": {
            "properties": {
                "query": {
                    "type": "percolator"
                }
            }
        }
    }
}'

在过滤器中注册查询

curl -XPUT 'localhost:9200/percolate-index/queries/1?refresh&pretty' -H 'Content-Type: application/json' -d'
{
    "query": {
        "bool": {
            "must": {
                "multi_match": {
                    "query": "iphone",
                    "fields": ["title"]
                }
            },
            "filter": [
                {
                    "terms": { 
                        "category_id": [4]
                    }
                }
            ]
        }
    }
}'

将文档与已注册的过滤器查询匹配

curl -XGET 'localhost:9200/percolate-index/_search?pretty' -H 'Content-Type: application/json' -d'
{
    "query" : {
        "percolate" : {
            "field" : "query",
            "document_type" : "doctype",
            "document" : {
                "title" : "iphone 6",
                "category_id" : 4
            }
        }
    }
}'