【问题标题】:Elasticsearch Query: Boosting specific fieldElasticsearch 查询:提升特定字段
【发布时间】:2017-06-16 22:04:12
【问题描述】:

我正在使用 Elasticsearch 2.4.3 并希望提升查询中的特定字段。这可能吗?我只知道如何提升索引。

您好!

更新

映射:

"firstName":{"type":"string",
     "analyzer":"customNGram"
},
"lastName":{
     "type":"string",
     "analyzer":"customNGram"
},
"note":{
     "type":"string",
     "analyzer":"customNGram"
}

查询(Java API):

    QueryBuilder qb = new BoolQueryBuilder()
        .must(QueryBuilders.matchQuery("_all", term)
                .analyzer("atsCustomSearchAnalyzer")
                .operator(Operator.AND));

    SearchRequestBuilder searchRequestBuilder = elasticsearchClient.prepareSearch("persons", "activities").setTypes("person", "activity")
            .setQuery(qb)
            .addHighlightedField("*").setHighlighterRequireFieldMatch(false)
            .setHighlighterOrder("score")
            .setHighlighterFragmentSize(150)
            .setHighlighterForceSource(true)
            .setSize(100)
            .addIndexBoost("persons", 200)
            .setFrom(offset); 

    return searchRequestBuilder.execute().get();

【问题讨论】:

  • 您能向我们展示您迄今为止尝试过的映射和查询吗?
  • 根据您的要求更新了我的问题

标签: elasticsearch field boosting


【解决方案1】:

如果您拆分匹配查询以匹配单个字段,例如使用多重匹配查询 (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html),您可以提升您喜欢的字段。就像这样:

QueryBuilder qb = new BoolQueryBuilder()
    .must(QueryBuilders.multiMatchQuery(term, "firstName^3",
    "lastName^3", "note")
            .analyzer("atsCustomSearchAnalyzer")
            .operator(Operator.AND));

应该将 firstName 和 lastName 相对于 note 字段提升 3 倍。

【讨论】:

  • 太棒了!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
相关资源
最近更新 更多