ElasticSearch:查询是否需要专门使用后缀别名来处理特定字段?

问题描述 投票:0回答:1

我对弹性搜索中字段的使用有点困惑。

查询是否需要专门识别字段后缀才能使关键字/多字段发挥作用?或者是否根据已设置的内容自动检查查询文本。检查示例映射。因为我觉得我运行的查询似乎没有使用我可能拥有的任何应用分析器到达正确的字段。

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")
                                    )
                                ) 
                            )
                        )
                  )
elasticsearch nest
1个回答
0
投票

在您的示例中,您将针对三个不同的字段执行查询

  • Field1
  • Field1.raw
  • Field1.edge

分别。

Elasticsearch仅使用指定的字段(对于需要指定字段的查询)。搜索策略跨多个字段组合多个查询并以某种受控方式(例如总和)组合相关性得分以产生总体相关性得分是非常常见的。

使用NEST,.Suffix()允许您定位多字段,并且仍然使用lambda表达式进行强类型访问,直到多字段的名称,这将不会存在于将被反序列化文档的POCO上。

© www.soinside.com 2019 - 2024. All rights reserved.