范围查询由弹性搜索中的匹配查询返回的分数

时间:2017-06-13 10:52:27

标签: elasticsearch elasticsearch-aggregation

假设我有一组文件,如: -

public IActionResult Create([FromBody]Student student){

}

现在我想在名称和城市字段上使用N-gram分析器实现全文搜索。

之后,我想只过滤用

返回的结果
    {
       "Name":"Random String 1"
       "Type":"Keyword"
       "City":"Lousiana"
       "Quantity":"10"
    }

大于1.2(可能按范围查询聚合方法)

然后在属性上应用术语聚合方法:" Type"然后使用" top_hits"返回每个桶中的最高结果。聚合方法。 我怎么能这样做?

我已经能够在搜索查询返回的分数上实现除范围查询之外的所有内容。

1 个答案:

答案 0 :(得分:1)

如果您想有机地对文档进行评分,那么您可以在查询中使用min_score来过滤匹配的文档以获得分数。

对于ngram分析器我添加了空格标记器和小写过滤器

<强>映射

PUT index1
{
  "settings": {
    "analysis": {
      "analyzer": {
        "edge_n_gram_analyzer": {
          "tokenizer": "whitespace",
          "filter" : ["lowercase",  "ednge_gram_filter"]
        }
      },
      "filter": {
      "ednge_gram_filter" : {
        "type" : "NGram",
        "min_gram" : 2,
        "max_gram": 10
      }
      }
    }
  },
  "mappings": {
    "document_type" : {
      "properties": {
        "Name" : {
          "type": "text",
          "analyzer": "edge_n_gram_analyzer"
        },
        "City" : {
          "type": "text",
          "analyzer": "edge_n_gram_analyzer"
        },
        "Type" : {
          "type": "keyword"
        }
      }
    }
  }
}

索引文件

POST index1/document_type
{
       "Name":"Random String 1",
       "Type":"Keyword",
       "City":"Lousiana",
       "Quantity":"10"
}

<强>查询

POST index1/_search
{
  "min_score": 1.2,
  "size": 0, 
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "Name": {
              "value": "string"
          }
          }
        },
        {
          "term": {
            "City": {
              "value": "string"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "type_terms": {
      "terms": {
        "field": "Type",
        "size": 10
      },
      "aggs": {
        "type_term_top_hits": {
          "top_hits": {
            "size": 10
          }
        }
      }
    }
  }
}

希望这有帮助