代码之家  ›  专栏  ›  技术社区  ›  Jan

弹性搜索嵌套字段增强+模糊

  •  4
  • Jan  · 技术社区  · 10 年前

    我正在尝试设置具有.NET连接可用性的Elasticsearch环境。我能够使用自定义的模糊距离进行基本查询,但我不能在查询时进行字段增强。 我已经试过几个教程/问题,比如 Elasticsearch Nest Boost query Elastic Search using NEST Field Boosting ,但NEST无法识别“.OnFieldsWithBoost”或“.OnFields”。

    我能够通过Elastic搜索的HTTP API进行一些字段提升:

    POST /products/typeproduct/_search
    {
      "query" : {
       "bool": {
          "should": [
            {
              "match": {
                "Title": {
                  "query": "sometest",
                  "boost": 10.0 
                }
              }
            },
            {
              "match": { 
                "Name": "sometest"
              }
            }
          ]
        }
      }
    }
    

    但我再次无法通过NEST语法匹配此查询,因为它不允许“should”中有多个“match”。

    我的最终目标是能够将某些字段(标题)提升到其他字段(名称)之上,并在匹配中添加一些模糊性。 任何帮助都将不胜感激。

    我的弹性搜索版本:2.2.0 我的NEST版本:2.0.2

    1 回复  |  直到 9 年前
        1
  •  6
  •   Rob    10 年前

    这是一个流畅的查询:

    var response = client.Search<Document>(search => search
        .Query(q => q.Bool(b => b
            .Should(
                s => s.Match(m => m.Query("sometest").Field(f => f.Title).Boost(1.1)),
                s => s.Match(m => m.Query("sometest").Field(f => f.Name).Fuzziness(Fuzziness.EditDistance(1)))
            ))));
    

    其生成以下查询以进行弹性搜索:

    {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "title": {
                  "boost": 1.1,
                  "query": "sometest"
                }
              }
            },
            {
              "match": {
                "name": {
                  "query": "sometest",
                  "fuzziness": 1
                }
              }
            }
          ]
        }
      }
    }
    

    我希望这就是你想要的:)

    推荐文章