LMK*_*LMK 1 c# elasticsearch nest
我的目标是搜索一个单词,而不管添加的分析器是什么。
我将匹配查询与关键字分析器一起使用,但我认为它可以与添加到该属性的默认分析器一起使用。
在弹性搜索中,我的作者文档结构是这样的
"_source": {
"Id": 3,
"Organization": "let123"
}
Run Code Online (Sandbox Code Playgroud)
索引映射:
createIndexDescriptor.NumberOfReplicas(1)
.NumberOfShards(1)
.Settings(
settings =>
settings
.Add("analysis.filter.autocomplete_filter_ngram.type", "edge_ngram")
.Add("analysis.filter.autocomplete_filter_ngram.min_gram", "2")
.Add("analysis.filter.autocomplete_filter_ngram.max_gram", "7")
.Add("analysis.analyzer.title_analyzer.type", "custom")
.Add("analysis.analyzer.title_analyzer.char_filter.0", "html_strip")
.Add("analysis.analyzer.title_analyzer.tokenizer", "standard")
.Add("analysis.analyzer.title_analyzer.filter.0", "lowercase")
.Add("analysis.analyzer.title_analyzer.filter.1", "asciifolding")
.Add("analysis.analyzer.title_analyzer.filter.2", "autocomplete_filter_ngram"))
.AddMapping<Author>(
m =>
m.MapFromAttributes()
.AllField(f => f.Enabled(true))
.Properties(
props =>
props.MultiField(
mf =>
mf.Name(t => t.Organization)
.Fields(fs => fs.String(s => s.Name(t => t.Organization).Analyzer("title_analyzer"))
))));
Run Code Online (Sandbox Code Playgroud)
在这里我注意到我的标题分析器过滤器之一是ngram
但我在匹配查询中使用了关键字分析器,以避免在搜索中自动完成。
GET /author/_search {
"query": {
"match": {
"Organization": {
"query": "le",
"analyzer": "keyword"
}
}
} }
Run Code Online (Sandbox Code Playgroud)
但是当我搜索时,上面的文档是匹配的。我期望的是 Organization 具有精确的值“ le ”
为什么这样匹配呢?有什么想法可以实现我的目标吗?
通过在查询中指定分析器,您可以指示 Elasticsearch 如何分析您发送的查询。
例如:
GET /author/_search
{
"query": {
"match": {
"Organization": {
"query": "le",
"analyzer": "keyword"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
告诉 Elasticsearch 对字符串使用keyword分析器le。它不会影响已在存储的数据上创建的索引术语 ( let123)
改变存储数据分析方式的唯一方法是更新映射并重新索引数据。
不可能对同一字段使用多个分析器,但数据可以轻松存储在多个字段中(每个字段都有一个分析器)。
例如:
{
"tweet" : {
"properties" : {
"name" : {
"type" : "string",
"index" : "analyzed",
"fields" : {
"raw" : {"type" : "string", "index" : "not_analyzed"}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
名称数据自动存储在两个位置 - 字段name(进行分析的位置)和name.raw(不进行分析的位置)。请参阅多字段。
| 归档时间: |
|
| 查看次数: |
7301 次 |
| 最近记录: |