V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
reid2017
V2EX  ›  Elasticsearch

elasticsearch 问题请教

  •  
  •   reid2017 · 2019-02-26 17:22:41 +08:00 · 3044 次点击
    这是一个创建于 2131 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在搞公司的全文搜索服务,本地搭建了 es 环境,做了些简单的测试,发现些问题。

    es version: 6.5.1 中文分词器: ik_smart

    在搜索的时候发现两个问题:

    1. 使用 Java api 搜索, 返回的 SearchHit 里面的 _score 全部是 0.0
    2. 搜索同一个关键词, 不添加额外排序规则, 只使用默认排序, Java api 和 http api 返回的数据顺序不一致

    Java 代码大致如下:

    
            BoolQueryBuilder query = QueryBuilders.boolQuery();
            query.filter(QueryBuilders.matchQuery("content", "我们"));
    
            SearchRequestBuilder requestBuilder = esClient.prepareSearch(INDEX_NAME)
                .setTypes(INDEX_TYPE)
                .setQuery(query);
    
            SearchResponse response = requestBuilder.get();
            response.getHits().forEach(hit -> System.out.println(hit.getScore() + " -> " + hit.getSourceAsString()));
    
    

    希望有 es 经验的朋友指点一下?

    10 条回复    2019-02-28 17:35:01 +08:00
    reid2017
        1
    reid2017  
    OP
       2019-02-26 18:27:42 +08:00
    110+ 浏览,无人回复啊。。
    rogwan
        2
    rogwan  
       2019-02-26 18:33:41 +08:00 via Android
    这里看不出 JAVA 指定了分词器,你全部使用默认分词器搜一下,看看两个 API 返回的排序是不是一样?
    reid2017
        3
    reid2017  
    OP
       2019-02-26 18:53:22 +08:00 via iPhone
    @rogwan 查询的时候要指定分词器的吗?不是建索引时指定就行了吗?
    rogwan
        4
    rogwan  
       2019-02-26 19:05:51 +08:00 via Android
    分词器有个执行顺序,你建索引指定了,查询的时候没有指定,就走用默认分词器了。
    springmarker
        5
    springmarker  
       2019-02-26 19:18:12 +08:00 via Android
    先用 json 查,再用 java 写
    scf0920
        6
    scf0920  
       2019-02-26 20:55:42 +08:00   ❤️ 1
    第一个问题,应该用 query,不是 filter。可以搜下这两者的区别。第二个问题,你可以看下 java api 最终也是转化成 http api 发送的,你可以看下转化之后跟你直接用的 http api 的请求 body 是否是一样的
    reid2017
        7
    reid2017  
    OP
       2019-02-26 21:55:19 +08:00
    @scf0920 谢谢,一言点醒
    kiddingU
        8
    kiddingU  
       2019-02-27 10:32:59 +08:00
    可以先写 DSL 查一下是不是正确的,然后 API 看是不是生成的最终 DSL 一致
    reid2017
        9
    reid2017  
    OP
       2019-02-27 10:57:44 +08:00
    @kiddingU 谢谢了,6 楼正解,用错了 filter 导致返回没分数,进而导致排序不一致。
    lyc1116
        10
    lyc1116  
       2019-02-28 17:35:01 +08:00
    fq 不参与排序
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3650 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:21 · PVG 18:21 · LAX 02:21 · JFK 05:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.