0

我想和elasticsearch自动完成

我已经试过
Elasticsearch自动完成排序长度

然而,所有的他们不符合我的期望

假设我有这样的数据:

PHP Programing 
php prado framework 
OOP PHP Programming 
PHPMyAdmin 
PHP 
Php 

每当我查询PHP,结果就会像上面所列内容^
如何使PHP显示第一?而不是最后的
以及PHP编程如何比PHP具有更高的权重,这等于查询?

注:我已经添加了小写过滤器,以便查询作为区分大小写的,这就是为什么这两个php, Php, PHP匹配查询

回答

0

我不正是你在做什么,知道治疗,多用一些这样有助于信息会有所帮助。

,但我得到了以下的工作,而不是建议的例子,但它显示了如何用分数来排序

@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