我是Elastic Search的新手,我想根据句子的部分单词搜索结果,比如搜索字符串是
" VAL"
它应该用字符串值
搜索结果"价值大于100"
但如果我使用的是查询
var searchDescriptor = new SearchDescriptor<ElasticsearchProject>()
searchDescriptor.Query(q =>
q.Wildcard(m => m.OnField(p => p.PNumber).Value(string.Format("*{0}*", searchString)))
);
它只适用于像
这样的单词字符串&#34; ValueIsGraterThan100&#34;
如果我使用这样的东西
var searchDescriptor = new SearchDescriptor<ElasticsearchProject>()
searchDescriptor.Query(q =>
q.QueryString(m => m.OnFields(p => p.PName).Query(searchString))
);
这适用于整个单词,就像我必须提供搜索字符串
一样&#34;值&#34;
搜索
&#34;价值大于100&#34;
仅提供val
将无效。那么我如何才能满足我的要求?
答案 0 :(得分:1)
您的字段当前未被分析,您可以使用由边缘ngram过滤器组成的edge n-gram分析器来标记您的字段,然后将字段保存在倒排索引上。您可以使用以下设置
PUT index_name1323
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"filter_edgengram"
]
}
},
"filter": {
"filter_edgengram": {
"type": "edgeNGram",
"min_gram": 2,
"max_gram": 15
}
}
}
},
"mappings": {
"test_type": {
"properties": {
"props": {
"type": "string",
"analyzer": "autocomplete_analyzer"
}
}
}
}
}
现在您可以简单地使用query_string或term filter来将您的文档与val匹配
POST index_name1323/_search
{
"query": {
"query_string": {
"default_field": "props",
"query": "val"
}
}
}
希望这有帮助