美好的一天:
我试图弄清楚如何在不使用定界符分割文本并将其存储到CompletionField
的情况下为建议建立索引:
List<string> inputs = new List<string>() {
facility.City,
facility.State,
facility.ZipCode
};
inputs.AddRange(facility.Name.Split(' '));
inputs.AddRange(facility.Address.Split(' '));
inputs.AddRange(facilityType.Description.Split(' '));
var completionField = new CompletionField()
{
Input = inputs.AsEnumerable<string>()
};
return completionField;
这不是执行此操作的最佳方法,因为,我宁愿让分析器处理此操作,然后再对其进行索引。有没有一种方法可以将整个文本发送给Elastic,并让Elastic分析文本并将其存储在完成索引或其他内容的字段中?
已更新
我有我的代码可以对整个文本进行索引并使用默认的分析器,但是,这就是索引,分析器没有将文本分解
"suggest": {
"input": [
"Reston",
"Virginia",
"20190",
"Facility 123456",
"22100 Sunset Hills Rd suite 150*"
]
},
我的代码:
List<string> inputs = new List<string>() {
facility.City,
facility.State,
facility.ZipCode
};
inputs.Add(facility.Name);
inputs.Add(facility.Address);
if (facility.Description != null && facility.Description != "")
{
inputs.Add(facility.Description);
}
var completionField = new CompletionField()
{
Input = inputs.AsEnumerable<string>()
};
return completionField;
我对该属性的映射:
"suggest": {
"type": "completion",
"analyzer": "simple",
"preserve_separators": true,
"preserve_position_increments": true,
"max_input_length": 50
},
但是,这并没有破坏我的输入。
答案 0 :(得分:1)
只需发送输入中的所有文本,然后指定一个使用空白标记器的自定义分析器
编辑 首先添加分析仪
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase"
]
}
}
}
},
"mappings": {
"_doc" : {
"properties" : {
"suggest" : {
"type" : "completion",
"analyzer": "my_custom_analyzer"
},
"title" : {
"type": "keyword"
}
}
}
}
}
然后在建议字段中指定