Я использую Elasticsearch.Я создал индекс автозаполнения, используя сопоставление, приведенное ниже.Я пытаюсь для множественного контекстного автозаполнения.Когда я проверил результаты, я обнаружил, что предложения не были правильными.
У меня есть сценарий иерархического автозаполнения.Я первый полевой дилер в качестве самостоятельного автозаполнения поля.Поле State имеет дилера в качестве контекста для предложений автозаполнения.Поле county имеет дилера и указывается в качестве контекста для поля автозаполнения.
mapping ={
"mappings": {
"panels": {
"properties": {
"dealer": {
"type": "completion"
},
"county": {
"type": "completion",
"contexts": [{
"name": "dealername",
"type": "category",
"path": "dealername"
},
{
"name": "statename",
"type": "category",
"path": "statename"
}
]
},
"state": {
"type": "completion",
"contexts": [{
"name": "dealername",
"type": "category",
"path": "dealername"
}]
},
"dealername":{
"type": "keyword"
},
"statename":{
"type": "keyword"
},
"countyname":{
"type": "keyword"
},
"meid": {
"type": "text"
}
}
}
}
}
res = es.indices.create(index="autocomplete", ignore=[400], body=mapping)
print(res)
def insertstatewise():
rows = session.execute("SELECT dealer_name, statename, county_name, meid from analytics.nearest_reco_output_1")
i = 0
for row in rows:
i += 1
yield {
"_id": row["meid"],
"_index": "autocomplete",
"_type": 'panels',
"_source":
{
"dealer": {
"input": [row["dealer_name"]]
},
"state": {
"input": [row["statename"]],
"contexts": {
"dealername": [row["dealer_name"]]
}
},
"county": {
"input": [row["county_name"]],
"contexts": {
"dealername": [row["dealer_name"]],
"statename": [row["statename"]]
}
},
"dealername": row["dealer_name"],
"statename": row["statename"],
"countyname": row["county_name"],
"meid": row["meid"]
},
}
xp = bulk(es, insertstatewise())
print(xp)
когда я запрашиваю свой индекс с помощью запроса curl
curl -X POST "########:9200/autocomplete/_search?pretty" -H 'Content-Type: application/json' -d'
{
"suggest": {
"state_suggestion_for_dealer" : {
"prefix" : "dealer2",
"completion" : {
"field" : "dealer",
"size": 10
}
}
}
}
ожидаемые результаты должны быть delaer2
Я получаю неправильные результаты для образца завершения
{
"text" : "dealer3",
"_index" : "autocomplete",
"_type" : "panels",
"_id" : "#############",
"_score" : 1.0,
"_source" : {
"dealer" : {
"input" : [
"dealer3"
]
},
"state" : {
"input" : [
"Virginia"
],
"contexts" : {
"dealername" : [
"dealer3"
]
}
},
"county" : {
"input" : [
"Park"
],
"contexts" : {
"dealername" : [
"dealer3"
],
"statename" : [
"Virginia"
]
}
},
"dealername" : "dealer3",
"statename" : "Virginia",
"countyname" : "Park",
"meid" : "#########"
}
}
Поскольку я запросил завершение с префиксом как дилер2, то почему в предложениях о завершении есть документы дилера3.