注:该文项目基础为分布式搜索
Elasticsearch——项目过程(一)
和
分布式搜索Elasticsearch——项目过程(二)
,项目骨架可至
这里
下载。
ES源代码中对
t
er
mQuery的描述如下所示:
* A Query that matches documents containing a term.
* @param name The name of the field
* @param value The value of the term
public static TermQueryBuilder termQuery(String name, String value) {
return new TermQueryBuilder(name, value);
termQuery是我花了较多时间才了解的一种Query(因之前对Lucene的研究较少),经总结发现,termQuery
中的value
有以下情况:
1. 若value为汉字,则大部分情况下,只能为一个汉字;
2. 若value为英文,则是一个单词;
termQuery代码如下所示:
* @author Geloin
package com.geloin.esample.util;
import java.util.UUID;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.junit.Test;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.geloin.esample.BaseTest;
import com.geloin.esample.entity.Person;
* @author Geloin
public class TermQueryTest extends BaseTest {
@Test
public void termQuery() {
String index = "user";
String type = "tb_person";
try {
// 创建索引
Person p = new Person();
p.setId(UUID.randomUUID().toString());
p.setAge(20);
p.setIsStudent(false);
p.setSex("男");
p.setName("别克");
ObjectMapper mapper = new ObjectMapper();
String source = mapper.writeValueAsString(p);
client.prepareIndex(index, type, p.getId()).setSource(source)
.execute().actionGet();
// 查询
QueryBuilder qb = QueryBuilders.termQuery("name", "别");
SearchResponse sResponse = client.prepareSearch(index)
.setTypes(type).setQuery(qb).setFrom(0).setSize(12)
.execute().actionGet();
SearchHits hits = sResponse.getHits();
if (null != hits && hits.totalHits() > 0) {
for (SearchHit hit : hits) {
String json = hit.getSourceAsString();
Person newPerson = mapper.readValue(json, Person.class);
System.out.println("name\t\t" + newPerson.getName());
System.out.println("sex\t\t" + newPerson.getSex());
System.out.println("age\t\t" + newPerson.getAge());
System.out.println("isStudent\t\t"
+ newPerson.getIsStudent());
} else {
log.info("没有查询到任何结果!");
// 防止出现:远程主机强迫关闭了一个现有的连接
Thread.sleep(100000);
} catch (Exception e) {
e.printStackTrace();
注:该文项目基础为分布式搜索Elasticsearch——项目过程(一)和分布式搜索Elasticsearch——项目过程(二),项目骨架可至这里下载。 ES源代码中对termQuery的描述如下所示: /** * A Query that matches documents containing a term. * * @param
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\6.1
Elasticsearch
入门_52studyit.com.wmv
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\6.2.png
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\6.3.png
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\6.4 Spring整合
Elasticsearch
_52studyit.com.wmv
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\6.5.png
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\6.6 开发社区
搜索
功能_52studyit.com.wmv
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\6.7.png
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\牛客Java高级工程师-第六章
Elasticsearch
,
分布式
搜索
引擎 .pdf
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\第六章素材和源码\community-6.2.zip
牛客Java高级工程师 第6章
Elasticsearch
,
分布式
搜索
引擎\第六章素材和源码\community-6.3.zip
最近在做es 查询,有一个业务涉及到 类似sql in 查询功能。日志格式是自定义格式,按照某一个字段使用
term
s
Query
查询时,结果为空.
数据流程: 日志文件——> logstash——>
elasticsearch
日志格式 {"host_name":"VM-TR73PO26-DB","time":"2018-12-09", ...}
主机名: 按照
Bo...
private List<Integer> doctorIds;
// id匹配多个值
temp
Query
Builder
.must(
Query
Builder
s.
term
s
Query
("_id", doctorIds));
最近在做es6.x 查询,有一个业务涉及到 类似sql in 查询功能。日志格式是自定义格式,按照某一个字段使用
term
s
Query
查询时,结果为空
日志格式 {"host_name":"VM-TR73PO26-DB","time":"2018-12-..
1
Query
Builder
s.match
Query
(“supplierName”,param)
2
Query
Builder
s.matchPhrase
Query
(“supplierName”,param)
3
Query
Builder
s.matchPhrasePrefix
Query
(“supplierName”,param)
4
Query
Builder
s.
term
Query
(“supplierName”,param)
5
Query
Builder
s.wildcard
Query
(“supp
我的字段是 name 和 age
Query
Builder
query
Builder
=
Query
Builder
s.
term
Query
(“name.keyword”, “淘宝”);
name 是你的字段名 其实真正的精准
搜索
值在字段名在的keyword
没事自己看看索引详情就能发现
当我们使用
Query
Builder
s.
term
Query
方法对指定的字段进行精准查询时,如果查询的条件为英文字母时,是没有问题的
当查询条件为中文时,则可能会查询不出数据,如下:当algorithmTag为中文时,即使es中有对应的记录,也是查询不出来的
@Override
public List<ESXTopicIndex> listByAlgorithmTag(String algorithmTag, int from, int size, int sta
解决方法:使用match
Query
查询
Match
Query
Builder
term
Query
Builder
=
Query
Builder
s.match
Query
("字段","查询的值");
match
Query
:会将
搜索
词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到。
term
Query
:不会对
搜索
词进行分词处理,而是作为一个整体与目标字段进行匹配,若完全匹...
Term
Query
Builder
:
词条查询是
ElasticSearch
的一个简单查询。它仅匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条。
term
查询会查找我们设定的准确值。
term
查询本身很简单,它接受一个字段名和我们希望查找的值。
Term
s
Query
Builder
:
词条查询(
Term
Query
)允许匹配单个未经分析的词条,多词条查询(
Term
s
Query
)可以用...
"type": "text",//type为keyword不可设置分词器
"analyzer": "ik_max_word",//设置分词器 ik分词器
"index": true,
"store": false
[/code]