我对弹性搜索中字段的使用有点困惑。
查询是否需要专门识别字段后缀才能使关键字/多字段发挥作用?或者是否根据已设置的内容自动检查查询文本。检查示例映射。因为我觉得我运行的查询似乎没有使用我可能拥有的任何应用分析器到达正确的字段。
GET /Samples/sample/_search
{
"query": {
"dis_max": {
"queries": [
{ "match": { "Field1": "alpha" }}
]
}
},
"size": 300
}
要么
GET /Samples/sample/_search
{
"query": {
"dis_max": {
"queries": [
{ "match": { "Field1.raw": "alpha" }}
]
}
},
"size": 300
}
要么
GET /Samples/sample/_search
{
"query": {
"dis_max": {
"queries": [
{ "match": { "Field1.edge": "alpha" }}
]
}
},
"size": 300
}
使用以下映射:
.Mappings(ms => ms
.Map<Sample>(m => m
.Properties(p => p
.Text(s => s
.Name(n => n.Field1)
.Fields(fs => fs
.Keyword(ss => ss
.Name("raw")
)
.Text(tt => tt
.Name("edge")
.Analyzer("sample_analyzer")
)
)
)
)
)
在您的示例中,您将针对三个不同的字段执行查询
Field1
Field1.raw
Field1.edge
分别。
Elasticsearch仅使用指定的字段(对于需要指定字段的查询)。搜索策略跨多个字段组合多个查询并以某种受控方式(例如总和)组合相关性得分以产生总体相关性得分是非常常见的。
使用NEST,.Suffix()
允许您定位多字段,并且仍然使用lambda表达式进行强类型访问,直到多字段的名称,这将不会存在于将被反序列化文档的POCO上。