簡體   English   中英

Python和Elasticsearch自動完成

[英]Python and Elasticsearch autcompletion

我正在嘗試在master分支上使用Python Elasticsearch版本1.1.0。 看來它將創建索引,但是使用建議字段時,檢索自動完成結果存在問題。

下面是一個基本的Python函數,用於創建索引,然后向其中添加一首歌曲,最后我們通過底部的curl查詢它。

不幸的是,它失敗並顯示以下錯誤:

"reason" : "BroadcastShardOperationFailedException[[music][2] ]; nested: ElasticsearchException[failed to execute suggest]; nested: ElasticsearchException[Field [suggest] is not a completion suggest field]; "
    } ]'

我用來創建索引和添加歌曲的功能如下:

conn = Elasticsearch()

def mapping():
    return """{
          "song" : {
                "properties" : {
                    "name" : { "type" : "string" },
                    "suggest" : { "type" : "completion",
                                  "index_analyzer" : "simple",
                                  "search_analyzer" : "simple",
                                  "payloads" : true
                    }
                }
            }
        }"""

def createMapping():
    settings = mapping()
    conn.indices.create(index= "music", body=settings)

def addSong():
    body = """{
        "name" : "Nevermind",
        "suggest" : {
            "input": [ "Nevermind", "Nirvana" ],
            "output": "Nirvana - Nevermind",
            "payload" : { "artistId" : 2321 },
            "weight" : 34
        }
    }"""

    res = conn.index(body=body, index="music", doc_type="song", id=1)

卷曲要求:

curl -X POST 'localhost:9200/music/_suggest?pretty' -d '{
    "song-suggest" : {
        "text" : "n",
        "completion" : {
            "field" : "suggest"
        }
    }
}'

使用create index API時 ,必須將映射包裝在mappings

def createMapping():
    settings = """{"mappings": %s}""" % mapping()
    conn.indices.create(index= "music", body=settings)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM