Вот как выглядят мои данные ES:
"boqList" : [
{
"particulars" : "Excavation ",
"quantity" : 1500,
"unit" : "m3",
"rate" : 500,
"amount" : 750000
},
{
"particulars" : "Providing & laying Rubble Soling",
"quantity" : 300,
"unit" : "m2",
"rate" : 450,
"amount" : 135000
},
{
"particulars" : "Providing & laying PCC M10",
"quantity" : 30,
"unit" : "m2",
"rate" : 650,
"amount" : 19500
},
{
"particulars" : "Providing & Laying Reinforcement With Cutting, Bending & Binding With Binding Wire Etc Complete.",
"quantity" : 50,
"unit" : "M.T.",
"rate" : 80000,
"amount" : 4000000
},
{
"particulars" : "Providing & Making Double Scaffolding",
"quantity" : 350,
"unit" : "m2",
"rate" : 150,
"amount" : 52500
},
...
Мой код NodeJS для индексации и отображения данных выглядит примерно так:
client.indices.create({
index: "boqs",
body: {
settings: {
index: {
analysis: {
filter: {},
analyzer: {
edge_ngram_analyzer: {
filter: ["lowercase"],
tokenizer: "edge_ngram_tokenizer"
},
edge_ngram_search_analyzer: {
tokenizer: "lowercase"
}
},
tokenizer: {
edge_ngram_tokenizer: {
type: "edge_ngram",
min_gram: 2,
max_gram: 5,
token_chars: ["letter"]
}
}
}
}
},
mappings: {
properties: {
boqList: {
properties: {
amount: {
type: "long"
},
particulars: {
type: "text",
fields: {
edgengram: {
type: "text",
analyzer: "edge_ngram_analyzer",
search_analyzer: "edge_ngram_search_analyzer"
}
},
analyzer: "standard"
},
quantity: {
type: "long"
},
rate: {
type: "long"
},
unit: {
type: "text",
fields: {
keyword: {
type: "keyword",
}
}
}
}
},
projectId: {
type: "text",
fields: {
keyword: {
type: "keyword",
}
}
}
}
},
},
}, function(err,resp,respcode){
console.log(err,resp,respcode);
})
Также я индексирую своиданные вроде этого:
http://localhost:9200/boqs/_doc/3
{
"projectId" : "ABCD",
"boqList" : [
{
"particulars" :
{
"input" : ["Providing & laying Rubble Soling"]
},
"quantity" : 300,
"unit" : "m2",
"rate" : 450,
"amount" : 135000
}
]
}
Я пытался использовать подход Edge NGram, чтобы реализовать автозаполнение в поле «частности» моего boqList и отправить ответ в виде JSON на мой интерфейс, который называется React. ,
В настоящее время, когда я пытаюсь что-либо запросить, я не получаю никаких обращений.
http://localhost:9200/boqs/_search
ИЛИ
http://localhost:9200/boqs/_search
{
"query": {
"multi_match": {
"query": "Providing",
"type": "phrase",
"fields": "boqList.particulars"
}
}
}
Я хотел иметь возможность выполнять авто-полный для фраз, даже в середине поля «подробности». Я что-то упускаю? Я относительно новичок в Elasticsearch, и поэтому любая помощь будет принята с благодарностью. Спасибо!