所以开始吧。我正在尝试添加大约 7.2k 文档。那里没问题。问题是在我无法收到任何建议之后。所以这是添加信息的方式:
def addVariantToElasticSearch(self,docId, companyId, companyName, parent, companyIndustry, variants, count,conn):
body = { "company":{
"company_name": companyName,
"parent": parent,
"suggest": { "input": variants,
"output": companyName,
"weight": count,
"payload": {"industry_id": companyIndustry,
"no_of_jobseekers":count,
"company_id": companyId
}
}
}
}
res = conn.index(body=body, index="companies", doc_type="company", id=docId)
映射和设置定义为:
def setting():
return { "settings" : {
"index": {
"number_of_replicas" : 0,
"number_of_shards": 1
},
"analysis" : {
"analyzer" : {
"my_edge_ngram_analyzer" : {
"tokenizer" : "my_edge_ngram_tokenizer",
"filter":["standard", "lowercase"]
}
},
"tokenizer" : {
"my_edge_ngram_tokenizer" : {
"type" : "edgeNGram",
"min_gram" : "1",
"max_gram" : "5",
"token_chars": [ "letter", "digit" ]
}
}
}
},
"mappings": {
"company" : {
"properties" : {
"name" : { "type" : "string" },
"industy": {"type": "integer"},
"count" : {"type": "long" },
"parent": {"type": "string"},
"suggest" : {
"type" : "completion",
"index_analyzer": "my_edge_ngram_analyzer",
"search_analyzer": "my_edge_ngram_analyzer",
"payloads": True
}
}
}
}
}
索引创建:
def createMapping(es):
settings = setting()
es.indices.create(index="companies", body=settings)
我调用createMapping
which uses setting()
,然后添加每个变体 - 由 try,except 包围 -> 不会导致任何问题。我可以看到我在浏览器中添加的所有文档以及查看状态、设置和映射。
但是当我使用如下 curl 请求时,我没有得到任何结果。(参见下面的 curl 和输出)
curl -X POST localhost:9200/companies/_suggest -d '
{
"company-suggest" : {
"text" : "1800",
"completion" : {
"field" : "suggest"
}
}
}'
{
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"suggest" : [ {
"text" : "ruby",
"offset" : 0,
"length" : 4,
"options" : [ ]
} ]
我目前正在使用 ES 1.1.0。我尝试了 Python API 0.4 和 1.1.0 都没有成功(我尝试了 0.4 是因为 1.1.0 不工作,尽管我知道这不是最好的,因为与 ES 版本的兼容性问题)。我还能够通过 curl 使用映射添加相同的设置,并添加了一个我可以通过上面的 curl 检索到的公司。
我不确定问题出在哪里。我查看了 ES 中的 Data 文件夹以确保它已创建,以及浏览器。我还确保只有一个 ES 实例正在运行。
非常感谢任何帮助,