【问题标题】:Elasticsearch autocomplete sort by lengthElasticsearch 自动完成按长度排序
【发布时间】:2016-11-16 09:12:22
【问题描述】:

我想用 elasticsearch 自动完成

我试过了

然而他们都没有达到我的期望

假设我有如下数据:

PHP Programing
php prado framework
OOP PHP Programming
PHPMyAdmin
PHP
Php

每当我查询PHP时,结果都会像上面的列表一样^
如何让PHP先显示?而不是最后一个
为什么PHP编程的权重比PHP高,等于查询?

注意:我已经添加了小写过滤器,因此查询被视为区分大小写,这就是 php, Php, PHP 与查询匹配的原因

【问题讨论】:

    标签: elasticsearch autocomplete elasticsearch-plugin elasticsearch-2.0


    【解决方案1】:

    我不知道你在做什么,所以提供更多信息会有所帮助。

    但我得到以下工作,而不是建议示例,但它显示了如何使用 score 进行排序

    @Test
    public void es() throws Exception {
        insert("value", "foo foo");
        insert("value", "foo");
        insert("value", "fooa");
        insert("value", "fao");
        insert("value", "foo potato foo bar");
        insert("value", "foo potato bar");
        insert("value", "foo potato");
        insert("value", "foo vegetable");
        insert("value", "foo vegetable");
    
        Thread.sleep(1000);
        SearchResponse searchResponse =
            getClient().prepareSearch()
                .setQuery(QueryBuilders.matchPhraseQuery("value", "foo"))
                .addSort(SortBuilders.scoreSort()
                    .order(SortOrder.DESC))
                .execute().actionGet();
    
        Arrays.stream(searchResponse.getHits().getHits())
            .forEach(h -> System.out.println(h.getSource().get("value") + ": " + h.getScore()));
    }
    

    输出:

    foo: 1.1177831
    foo foo: 0.98798996
    foo potato foo bar: 0.790392
    foo potato: 0.6986144
    foo vegetable: 0.6986144
    foo vegetable: 0.6986144
    foo potato bar: 0.55889153
    

    【讨论】:

      【解决方案2】:

      要实现所需的行为,您需要在使用 edgengram 分析器的字段上使用 edgengrams(https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html)。要将精确匹配排在任何其他前缀匹配之上,请维护一个未分析的附加字段,并在 should 子句中使用它以增加其相关性(https://www.elastic.co/guide/en/elasticsearch/guide/current/query-scoring.html)

      【讨论】:

        猜你喜欢
        • 2015-06-29
        • 2021-11-20
        • 1970-01-01
        • 2022-01-18
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多