【发布时间】:2021-02-19 01:48:28
【问题描述】:
我有一些如下所列的旅行。
- 难忘的伊斯坦布尔
- 难忘的雅典城逃亡
- 难忘的罗马城逃亡
- 难忘的巴黎
我已经在 elasticsearch 中创建了一个索引,如下所述。
string newName = indexName + DateTime.Now.Ticks;
CreateIndexDescriptor createIndexDescriptor = new CreateIndexDescriptor(newName)
.Settings(s => s
.NumberOfShards(4)
.NumberOfReplicas(2)
.Setting("max_result_window", int.MaxValue)
.Setting("max_ngram_diff", 25)
.Analysis(a => a
.Analyzers(aa => aa
.Custom("my_analyzer", ca => ca
.Tokenizer("standart")
.Filters("lowercase", "my_ascii_folding", "my_stemm", "stop")
)
)
.TokenFilters(t => t
.AsciiFolding("my_ascii_folding", af => af.PreserveOriginal(true))
.Stemmer("my_stemm", sm => sm.Language("english"))
//.EdgeNGram("key_edgengram", ng => ng.MinGram(4).MaxGram(10))
)
.Tokenizers(t => t.Standard("standart"))
)
)
.Map<T>(mm => mm.AutoMap().Properties(p => p.SearchAsYouType(t => t.Name(n => n.SearchingArea).Analyzer("my_analyzer"))));
MemoryStream stream = new MemoryStream();
elasticClient.RequestResponseSerializer.Serialize(createIndexDescriptor, stream);
string jsonData = Encoding.UTF8.GetString(stream.ToArray());
var indexResponse = elasticClient.Indices.Create(createIndexDescriptor);
当我尝试搜索“memor”或“memorable”时,它会返回所有这些。但我想搜索“memorab”或“memorabl”它没有返回任何结果。
这是我的搜索查询:
GET /tourIndex/_search
{
"from": 0,
"highlight": {
"fields": {
"searchingArea": {},
"route": {}
},
"post_tags": [
"</strong>"
],
"pre_tags": [
"<strong style='background: #efefef; padding: 3px;'>"
]
},
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"match": {
"searchingArea": {
"query": "memorab"
}
}
}
]
}
},
"size": 20,
"sort": [
{
"score": {
"order": "desc"
}
}
]
}
当我使用“match_phrase_prefix”和“match_phrase”时,结果是一样的。
感谢您的帮助。
【问题讨论】:
标签: elasticsearch