elasticsearch,faceted-search,Autocomplete,elasticsearch,Faceted Search" /> elasticsearch,faceted-search,Autocomplete,elasticsearch,Faceted Search" />

Autocomplete 弹性搜索在数组字段上的自动完成搜索

Autocomplete 弹性搜索在数组字段上的自动完成搜索,autocomplete,elasticsearch,faceted-search,Autocomplete,elasticsearch,Faceted Search,我正在对具有字符串类型数组的文档字段进行自动完成建议。我的文件如下 { "title": "Product1", "sales": "6", "rating": "0.0", "cost": "45.00", "tags": [ "blog", "magazine", "responsive", "two columns", "wordpress" ], "c

我正在对具有字符串类型数组的文档字段进行自动完成建议。我的文件如下

{

    "title": "Product1",
    "sales": "6",
    "rating": "0.0",
    "cost": "45.00",
    "tags": [
        "blog",
        "magazine",
        "responsive",
        "two columns",
        "wordpress"
    ],
    "category": "wordpress",
    "description": "Product1 Description",
    "createDate": "2013-12-19"
}

{

    "title": "Product1",
    "sales": "6",
    "rating": "0.0",
    "cost": "45.00",
    "tags": [
        "blog",
        "paypal",
        "responsive",
        "skrill",
        "wordland"
    ],
    "category": "wordpress",
    "description": "Product1 Description",
    "createDate": "2013-12-19"
}
我正在标记字段上执行自动完成搜索。我的疑问是

query: {
                    query_string: {
                        query: "word*",
                        fields: ["tags"]
                    }
                },
                facets: {
                    tags: {
                        terms: {
                            field: "tags"
                        }
                    }
                }
当用户输入“word”时,我想显示“wordland”和“wordpress”。然而,我无法做到这一点

你能帮个忙吗

谢谢你试过了吗?解决问题的一种方法如下:

1) 创建索引:

curl -XPUT "http://localhost:9200/test_index/"
2) 使用完成建议器类型创建映射:

curl -XPUT "http://localhost:9200/test_index/product/_mapping" -d'
{
   "product": {
      "properties": {
         "category": {
            "type": "string"
         },
         "cost": {
            "type": "string"
         },
         "createDate": {
            "type": "date",
            "format": "dateOptionalTime"
         },
         "description": {
            "type": "string"
         },
         "rating": {
            "type": "string"
         },
         "sales": {
            "type": "string"
         },
         "tags": {
            "type": "string"
         },
         "title": {
            "type": "string"
         },
         "suggest": {
            "type": "completion",
            "index_analyzer": "simple",
            "search_analyzer": "simple",
            "payloads": false
         }
      }
   }
}'
3) 添加您的文档:

curl -XPUT "http://localhost:9200/test_index/product/1" -d'
{
   "title": "Product1",
   "sales": "6",
   "rating": "0.0",
   "cost": "45.00",
   "tags": [
      "blog",
      "magazine",
      "responsive",
      "two columns",
      "wordpress"
   ],
   "suggest": {
      "input": [
         "blog",
         "magazine",
         "responsive",
         "two columns",
         "wordpress"
      ]
   },
   "category": "wordpress",
   "description": "Product1 Description",
   "createDate": "2013-12-19"
}'

curl -XPUT "http://localhost:9200/test_index/product/2" -d'
{

    "title": "Product2",
    "sales": "6",
    "rating": "0.0",
    "cost": "45.00",
    "tags": [
        "blog",
        "paypal",
        "responsive",
        "skrill",
        "wordland"
    ],
   "suggest": {
      "input": [
         "blog",
        "paypal",
        "responsive",
        "skrill",
        "wordland"
      ]
   },
    "category": "wordpress",
    "description": "Product1 Description",
    "createDate": "2013-12-19"
}'
4) 然后使用_suggest端点进行查询:

curl -XPOST "http://localhost:9200/test_index/_suggest" -d'
{
    "product_suggest":{
        "text":"word",
        "completion": {
            "field" : "suggest"
        }
    }
}'
您将得到您预期的结果:

{
   "_shards": {
      "total": 2,
      "successful": 2,
      "failed": 0
   },
   "product_suggest": [
      {
         "text": "word",
         "offset": 0,
         "length": 4,
         "options": [
            {
               "text": "wordland",
               "score": 1
            },
            {
               "text": "wordpress",
               "score": 1
            }
         ]
      }
   ]
}

当然,这个解决方案可以稍加改进,特别是通过删减一些重复数据,但这应该会为您指明正确的方向。

谢谢您的回答,我会试试这个谢谢Sloan。这是有效的Gr8。是否有任何方法可以在预先存在的索引上实现这一点,而无需重新播种。您所描述的这种方法会导致重复数据,我不希望这样。是的,您可以使用ngrams。无论如何,我更喜欢那种方法。如果你再发一个问题,我会给你一个例子。这个解决方案在ES 5.3中对我不起作用。不再支持playload选项,输出包含完整文档,而不是匹配术语的标记