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

elasticsearch 问题请教

  •  
  •   reid2017 · 53 天前 · 1114 次点击
    这是一个创建于 53 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在搞公司的全文搜索服务,本地搭建了 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
        1
    reid2017   53 天前
    110+ 浏览,无人回复啊。。
        2
    rogwan   53 天前 via Android
    这里看不出 JAVA 指定了分词器,你全部使用默认分词器搜一下,看看两个 API 返回的排序是不是一样?
        3
    reid2017   53 天前 via iPhone
    @rogwan 查询的时候要指定分词器的吗?不是建索引时指定就行了吗?
        4
    rogwan   53 天前 via Android
    分词器有个执行顺序,你建索引指定了,查询的时候没有指定,就走用默认分词器了。
        5
    springmarker   53 天前 via Android
    先用 json 查,再用 java 写
        6
    scf0920   53 天前   ♥ 1
    第一个问题,应该用 query,不是 filter。可以搜下这两者的区别。第二个问题,你可以看下 java api 最终也是转化成 http api 发送的,你可以看下转化之后跟你直接用的 http api 的请求 body 是否是一样的
        7
    reid2017   53 天前
    @scf0920 谢谢,一言点醒
        8
    kiddingU   53 天前
    可以先写 DSL 查一下是不是正确的,然后 API 看是不是生成的最终 DSL 一致
        9
    reid2017   53 天前
    @kiddingU 谢谢了,6 楼正解,用错了 filter 导致返回没分数,进而导致排序不一致。
        10
    lyc1116   51 天前
    fq 不参与排序
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2270 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 08:53 · PVG 16:53 · LAX 01:53 · JFK 04:53
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1