我对弹性搜索非常陌生,我想根据句子中的部分单词搜索结果,就像搜索字符串是
“瓦尔”
它应该使用字符串值搜索结果。
“价值大于100”
但是如果我使用的是一个查询
var searchDescriptor = new SearchDescriptor<ElasticsearchProject>()
searchDescriptor.Query(q =>
q.Wildcard(m => m.OnField(p => p.PNumber).Value(string.Format("*{0}*", searchString)))
);它只对一个字串起作用,如
"ValueIsGraterThan100“
如果我用这样的东西
var searchDescriptor = new SearchDescriptor<ElasticsearchProject>()
searchDescriptor.Query(q =>
q.QueryString(m => m.OnFields(p => p.PName).Query(searchString))
);这将适用于整个单词,就像我必须提供搜索字符串,如
“价值”
搜索
“价值大于100”
只有提供val才不会work.So如何满足我的需求?
发布于 2017-02-08 10:28:43
您目前的字段是not_analyzed,您可以使用由边缘ngram过滤器组成的边n-g分析器来标记字段,然后再将字段保存在倒排索引上。您可以使用以下设置
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或术语筛选器将两个文档与val匹配。
POST index_name1323/_search
{
"query": {
"query_string": {
"default_field": "props",
"query": "val"
}
}
}希望这能有所帮助
https://stackoverflow.com/questions/42109245
复制相似问题