相关文章推荐
谈吐大方的猕猴桃  ·  android dump yuv ...·  2 年前    · 
高大的小熊猫  ·  how to install .net ...·  2 年前    · 

1,问题:

当我们使用QueryBuilders.termQuery方法对指定的字段进行精准查询时,如果查询的条件为英文字母时,是没有问题的

当查询条件为中文时,则可能会查询不出数据,如下:当algorithmTag为中文时,即使es中有对应的记录,也是查询不出来的

    @Override
    public List<ESXTopicIndex> listByAlgorithmTag(String algorithmTag, int from, int size, int status) {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
                .must(QueryBuilders.termQuery(Constant.XTopicIndexFields.FIELD_ALGORITHM_TAG, algorithmTag));
        boolQueryBuilder.must(QueryBuilders.termQuery(XTopicConstant.FIELD_STATUS, status));
        searchSourceBuilder.sort(XTopicIndexFields.FIELD_TOPIC_PUBLISH_TIME, SortOrder.DESC);
        searchSourceBuilder.from(from).size(size).postFilter(boolQueryBuilder);
        return query(searchSourceBuilder.toString());

附:依赖的es版本:

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.3.0</version>
        </dependency>

2,解决方法: 在查询条件的关键词后拼接".keyword" 变为如下即可实现精准匹配:

    @Override
    public List<ESXTopicIndex> listByAlgorithmTag(String algorithmTag, int from, int size, int status) {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
                .must(QueryBuilders.termQuery(XTopicIndexFields.FIELD_ALGORITHM_TAG + ".keyword", algorithmTag));
        boolQueryBuilder.must(QueryBuilders.termQuery(XTopicConstant.FIELD_STATUS, status));
        searchSourceBuilder.sort(XTopicIndexFields.FIELD_TOPIC_PUBLISH_TIME, SortOrder.DESC);
        searchSourceBuilder.from(from).size(size).postFilter(boolQueryBuilder);
        return query(searchSourceBuilder.toString());

3,注意:

网上有说使用matchPhraseQuery代替termQuery使用可以查询出来,问题是:虽然使用matchPhraseQuery可以查询出来,但是查询出来的内容会比精准查询的数据要多,因为它并不是严格的精准查询的,而是将查询条件作为一个整体(不进行分词)然后进行模糊查询的

1,问题:当我们使用QueryBuilders.termQuery方法对指定的字段进行精准查询时,如果查询的条件为英文字母时,是没有问题的当查询条件为中文时,则可能会查询不出数据,如下:当algorithmTag为中文时,即使es中有对应的记录,也是查询不出来的 @Override public List&lt;ESXTopicIndex&gt; listByAlgorithmTag(String algorithmTag, int from, int size, int sta
最近做的项目有一个功能是要精确查找某个关键字,和另一个搜索功能公用一套ES搜索服务,但是遇到一个问题就是中文精确查找,用estermquery()去查只能查出英文和数字,查了很多资料终于搞定了。在这做一个记录和大牛们讨论:     首先要装一下IK分词插件,这个对于中文搜索很重要,当然中文分词插件还有其他许多,es默认对中文是按字来分的。     其次是建索引的时候指定每列的属性,如下:
private QueryBuilder getQueryBuilder() { // termsQuery("key", obj1, obj2..) 一次匹配多个值 // matchQuery("key", Obj) 单个匹配, field不支持通配符, 前缀具高级特性 // multiMatchQuery("text", "field1", "field2"..); 匹配多个字段, field有通配符忒行 private List<Integer> doctorIds; // id匹配多个值 tempQueryBuilder.must(QueryBuilders.termsQuery("_id", doctorIds)); 最近在做es6.x 查询,有一个业务涉及到 类似sql in 查询功能。日志格式是自定义格式,按照某一个字段使用termsQuery 查询时,结果为空 日志格式 {"host_name":"VM-TR73PO26-DB","time":"2018-12-..
最近在做es 查询,有一个业务涉及到 类似sql in 查询功能。日志格式是自定义格式,按照某一个字段使用termsQuery 查询时,结果为空. 数据流程: 日志文件——> logstash——>elasticsearch 日志格式 {"host_name":"VM-TR73PO26-DB","time":"2018-12-09", ...} 主机名: 按照 Bo...
1 QueryBuilders.matchQuery(“supplierName”,param) 2 QueryBuilders.matchPhraseQuery(“supplierName”,param) 3 QueryBuilders.matchPhrasePrefixQuery(“supplierName”,param) 4 QueryBuilders.termQuery(“supplierName”,param) 5 QueryBuilders.wildcardQuery(“supp 我的字段是 name 和 age QueryBuilder queryBuilder = QueryBuilders.termQuery(“name.keyword”, “淘宝”); name 是你的字段名 其实真正的精准搜索值在字段名在的keyword 没事自己看看索引详情就能发现
注:该文项目基础为分布式搜索Elasticsearch——项目过程(一)和分布式搜索Elasticsearch——项目过程(二),项目骨架可至这里下载。         ES源代码中对termQuery的描述如下所示: * A Query that matches documents containing a term. * @param
这是“ 2nova Interactive”团队的测试任务的实现。 必须使用以下symfony组件而不使用框架(仅使用具有添加功能(symfony /路由,symfony / yaml,symfony / config等)的功能的这些组件)编写授权注册表单: symfony / http-foundation:2.7.x symfony /形式:2.7.x symfony /验证器:2.7.x 教义/ [dbal | orm]:2.6.x(使用QueryBuilders和缓存进行选择的强制性示例,当使用*教义/ orm时,您必须使用yaml映射和强制使用实体存储库的实体) 树枝/小树枝:1.x # Update package lists apt-get update # install sqlite apt-get install s 4.9.6. 范围的查找,支持RangeQuery 13 4.9.7. 现在还不支持SpanQuery 13 4.10. MultiFieldQueryParser类--多域搜索 13 4.11. MultiSearcher类--多个索引搜索 13 4.12. ParalellMultiSearcher类---多线程搜索 14 5. 排序 14 5.1. Sort类 14 5.2. SortField类 14 5.3. 指定排序的法则 15 5.3.1. 按照文档的得分降序排序 15 5.3.2. 按文档的内部ID升序排序 15 5.3.3. 按照一个Field来排序 15 5.3.4. 按照多个Field来排序 15 5.3.5. 改变SortField中的Locale信息 15 6. 过滤器 16 7. 分析器Analysis 16 7.1. 自带分析器和过滤器 16 7.2. 第三方过分析器 17 7.2.1. JE分词用法 17 8. 索引的合并 18 9. 各种Query 18 9.1. 概述 18 9.2. 使用特定的分析器搜索 18 9.3. 按词条搜索—TermQuery 19 9.4. 按“与或”搜索—BooleanQuery 19 9.5. 在某一范围内搜索—RangeQuery 19 9.6. 使用前缀搜索—PrefixQuery 19 9.7. 短语搜索—PhraseQuery 20 9.8. 多短语搜索—MultiPhraseQuery 20 9.9. 模糊搜索—FuzzyQuery 21 9.10. 通配符搜索—WildcardQuery 21 9.11. 跨度搜索 21 9.11.1. SpanTermQuery 21 9.11.2. SpanFirstQuery 21 9.11.3. SpanNearQuery 22 9.11.4. SpanOrQuery 22 9.11.5. SpanNotQuery 22 9.12. RegexQuery—正则表达式的查询 22 10. 评分机制 23 10.1. 概述 23 11. Lucene的索引“锁” 23 Git bash Error: Could not fork child process: There are no available terminals (-1) 调包侠理查: 还是任务管理器把所有相关任务都关掉比较有效 error setting certificate verify locations解决办法 卷不过啦呜呜: 感谢很有用啊表情包 error setting certificate verify locations解决办法 Qiaos_: 使用方法二解决了,感谢大佬表情包 改变IntelliJ IDEA 中的system和config/plugins的默认C盘的路径 orange_band: 可能是因为你是直接复制文件路径的原因,windows直接复制文件路径,分割符号是 \ ,但是idea无法识别,必须手动修改为 / ,才能启动,否则你写的文件路径会被错误识别成一个乱七八糟的地址,导致启动错误。 Springboot中使用@RequiresRoles和@RequiresPermissions注解无效 感谢大佬,搞了一上午 Could not transfer artifact xx maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repo User-agent UA收藏