如题,本文主要讲关于全文搜索elasticsearch中matchQuery和termQuery的区别,附带一点其它查询用法。

准备工作,下载相关jar包,本文所有jar包列表:

apache-log4j-extras-1.2.17.jar
commons-cli-1.3.1.jar
compiler-0.8.13.jar
compress-lzf-1.0.2.jar
elasticsearch-2.3.1.jar
guava-18.0.jar
HdrHistogram-2.1.6.jar
hppc-0.7.1.jar
jackson-core-2.6.2.jar
jackson-dataformat-cbor-2.6.2.jar
jackson-dataformat-smile-2.6.2.jar
jackson-dataformat-yaml-2.6.2.jar
jna-4.1.0.jar
joda-convert-1.2.jar
joda-time-2.8.2.jar
jsr166e-1.1.0.jar
jts-1.13.jar
log4j-1.2.17.jar
lucene-analyzers-common-5.5.0.jar
lucene-backward-codecs-5.5.0.jar
lucene-core-5.5.0.jar
lucene-grouping-5.5.0.jar
lucene-highlighter-5.5.0.jar
lucene-join-5.5.0.jar
lucene-memory-5.5.0.jar
lucene-misc-5.5.0.jar
lucene-queries-5.5.0.jar
lucene-queryparser-5.5.0.jar
lucene-sandbox-5.5.0.jar
lucene-spatial3d-5.5.0.jar
lucene-spatial-5.5.0.jar
lucene-suggest-5.5.0.jar
netty-3.10.5.Final.jar
securesm-1.0.jar
snakeyaml-1.15.jar
spatial4j-0.5.jar
t-digest-3.0.jar

获取java客户端工具类:

package com.syz.es.util;import java.net.InetAddress;
import java.net.UnknownHostException;import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;public class EsUtil {private static Client client = null;public static Client getTransportClient() throws UnknownHostException {if (client == null|| ((TransportClient) client).connectedNodes().isEmpty()) {synchronized (EsUtil.class) {if (client == null|| ((TransportClient) client).connectedNodes().isEmpty()) {Settings settings = Settings.settingsBuilder().put("cluster.name", "elasticsearch").build();client = TransportClient.builder().settings(settings).build().addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));}}}return client;}public static void close(Client client) {if (client != null) {client.close();}}
}

一个pojo类

package com.syz.es.pojo;public class User {private String id;private String id2;private String name;private int age;private double salary;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getId2() {return id2;}public void setId2(String id2) {this.id2 = id2;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}}

创建索引,类型基本上与User对应,其中id为默认分词,id2设置为不分词。

package com.syz.es.indices;import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.Requests;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;import com.syz.es.util.EsUtil;public class IndicesCreate {public static void main(String[] args) {Client client = null;try {client = EsUtil.getTransportClient();// deleteclient.admin().indices().prepareDelete("product").execute().actionGet();// createclient.admin().indices().prepareCreate("product").execute().actionGet();XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject("properties").startObject("id").field("type", "string").endObject().startObject("id2").field("type", "string").field("index", "not_analyzed").endObject().startObject("name").field("type", "string").endObject().startObject("age").field("type", "integer").endObject().startObject("salary").field("type", "double").endObject().endObject();PutMappingRequest paramPutMappingRequest = Requests.putMappingRequest("product").type("user").source(mapping);client.admin().indices().putMapping(paramPutMappingRequest).actionGet();} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}
}

索引数据

package com.syz.es.indices;import java.io.IOException;
import java.util.Random;import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;import com.syz.es.pojo.User;
import com.syz.es.util.EsUtil;public class IndicesIndex {private static final Random r = new Random();private static final String pool = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";private static final String symbol = ".*&?-+@%";public static void main(String[] args) {Client client = null;try {client = EsUtil.getTransportClient();System.out.println("number--------");indexNumber(client);System.out.println("lower--------");indexLower(client);System.out.println("upper--------");indexUpper(client);System.out.println("mixed--------");indexMixed(client);System.out.println("symbol--------");indexSymbol(client);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}private static void indexNumber(Client client) {for (int i = 0; i < 10; i++) {User u = new User();String id = 10000 + i + "";String id2 = id;String name = "张三";int age = r.nextInt(100);double salary = r.nextDouble() * 10000;u.setId(id);u.setId2(id2);u.setName(name);u.setAge(age);u.setSalary(salary);String json = generateJson(u);System.out.println(i + "==data index begin:" + json);IndexResponse response = client.prepareIndex("product", "user").setSource(json).get();System.out.println(i + "==data index end:" + response.getId());}}private static void indexLower(Client client) {for (int i = 0; i < 10; i++) {User u = new User();String id = getRandomLower();String id2 = id;String name = "李四";int age = r.nextInt(100);double salary = r.nextDouble() * 10000;u.setId(id);u.setId2(id2);u.setName(name);u.setAge(age);u.setSalary(salary);String json = generateJson(u);System.out.println(i + "==data index begin:" + json);IndexResponse response = client.prepareIndex("product", "user").setSource(json).get();System.out.println(i + "==data index end:" + response.getId());}}private static void indexUpper(Client client) {for (int i = 0; i < 10; i++) {User u = new User();String id = getRandomUpper();String id2 = id;String name = "王二麻子";int age = r.nextInt(100);double salary = r.nextDouble() * 10000;u.setId(id);u.setId2(id2);u.setName(name);u.setAge(age);u.setSalary(salary);String json = generateJson(u);System.out.println(i + "==data index begin:" + json);IndexResponse response = client.prepareIndex("product", "user").setSource(json).get();System.out.println(i + "==data index end:" + response.getId());}}private static void indexMixed(Client client) {for (int i = 0; i < 10; i++) {User u = new User();String id = getRandomMixed();String id2 = id;String name = "店小二";int age = r.nextInt(100);double salary = r.nextDouble() * 10000;u.setId(id);u.setId2(id2);u.setName(name);u.setAge(age);u.setSalary(salary);String json = generateJson(u);System.out.println(i + "==data index begin:" + json);IndexResponse response = client.prepareIndex("product", "user").setSource(json).get();System.out.println(i + "==data index end:" + response.getId());}}private static void indexSymbol(Client client) {for (int i = 0; i < 10; i++) {User u = new User();String id = getRandomSymbol();String id2 = id;String name = "屠夫";int age = r.nextInt(100);double salary = r.nextDouble() * 10000;u.setId(id);u.setId2(id2);u.setName(name);u.setAge(age);u.setSalary(salary);String json = generateJson(u);System.out.println(i + "==data index begin:" + json);IndexResponse response = client.prepareIndex("product", "user").setSource(json).get();System.out.println(i + "==data index end:" + response.getId());}}private static String getRandomLower() {StringBuilder sb = new StringBuilder();for (int i = 0; i < 20; i++) {int cidx = r.nextInt(26);char c = (char) ('a' + cidx);sb.append(c);}return sb.toString();}private static String getRandomUpper() {StringBuilder sb = new StringBuilder();for (int i = 0; i < 20; i++) {int cidx = r.nextInt(26);char c = (char) ('A' + cidx);sb.append(c);}return sb.toString();}private static String getRandomMixed() {StringBuilder sb = new StringBuilder();int psize = pool.length();for (int i = 0; i < 20; i++) {int cidx = r.nextInt(psize);char c = pool.charAt(cidx);sb.append(c);}return sb.toString();}private static String getRandomSymbol() {StringBuilder sb = new StringBuilder();int psize = pool.length();for (int i = 0; i < 5; i++) {int cidx = r.nextInt(psize);char c = pool.charAt(cidx);sb.append(c);}int cidx2 = r.nextInt(symbol.length());char c2 = symbol.charAt(cidx2);sb.append(c2);for (int i = 0; i < 14; i++) {int cidx = r.nextInt(psize);char c = pool.charAt(cidx);sb.append(c);}return sb.toString();}private static String generateJson(User user) {String json = "";try {XContentBuilder contentBuilder = XContentFactory.jsonBuilder().startObject();contentBuilder.field("id", user.getId());contentBuilder.field("id2", user.getId2());contentBuilder.field("name", user.getName());contentBuilder.field("age", user.getAge());contentBuilder.field("salary", user.getSalary());json = contentBuilder.endObject().string();} catch (IOException e) {e.printStackTrace();}return json;}
}

列举一刚才建的这5种数据:

辅助类:

package com.syz.es.search;import java.util.Map;import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;public class Printer {public static void print(SearchHits hits) {for (SearchHit hit : hits) {Map<String, Object> map = hit.getSource();System.out.println(map);}}
}

matchQuery:

package com.syz.es.search;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;
import com.syz.es.util.EsUtil;
public class Match {
public static void main(String[] args) {
matchAll();
matchAllSize();
matchQuery();
}
private static void matchAll() {
Client client = null;
try {
client = EsUtil.getTransportClient();
QueryBuilder query = QueryBuilders.matchAllQuery();
SearchResponse response = client.prepareSearch("product")
.setTypes("user").setQuery(query).get();
SearchHits hits = response.getHits();
long total = hits.getTotalHits();
System.out.println("total:" + total);
int len = hits.getHits().length;
System.out.println("len:" + len);
Printer.print(hits);
} catch (Exception e) {
e.printStackTrace();
} finally {
EsUtil.close(client);
}
}
private static void matchAllSize() {
Client client = null;
try {
client = EsUtil.getTransportClient();
QueryBuilder query = QueryBuilders.matchAllQuery();
SearchResponse response = client.prepareSearch("product")
.setTypes("user").setQuery(query).setSize(3).get();
SearchHits hits = response.getHits();
long total = hits.getTotalHits();
System.out.println("total:" + total);
int len = hits.getHits().length;
System.out.println("len:" + len);
Printer.print(hits);
} catch (Exception e) {
e.printStackTrace();
} finally {
EsUtil.close(client);
}
}
/**
* 默认的standard analyzer分词规则:<br>
* 去掉大部分标点符号,并以此分割原词为多个词,把分分割后的词转为小写放入token组中。<br>
* 对于not-analyzed的词,直接把原词放入token组中。<br>
* matchQuery的机制是:先检查字段类型是否是analyzed,如果是,则先分词,再去去匹配token;如果不是,则直接去匹配token。<br>
* id=id2,默认分词,id2不分词。<br>
* 以wwIF5-vP3J4l3GJ6VN3h为例:<br>
* id是的token组是[wwif5,vp3j4l3gj6vn3h]<br>
* id2的token组是[wwIF5-vP3J4l3GJ6VN3h]<br>
* 可以预计以下结果:<br>
* 1.matchQuery("id", "字符串"),"字符串"分词后有[wwif5,vp3j4l3gj6vn3h]其中之一时,有值。<br>
* 如:wwIF5-vP3J4l3GJ6VN3h,wwif5-vp3j4l3gj6vn3h,wwIF5,wwif5,wwIF5-6666等等。<br>
* 2.matchQuery("id2", "wwIF5-vP3J4l3GJ6VN3h"),有值。<br>
* 特别说明:<br>
* 在创建索引时,如果没有指定"index":"not_analyzed"<br>
* 会使用默认的analyzer进行分词。当然你可以指定analyzer。<br>
* 在浏览器中输入:<br>
* http://localhost:9200/_analyze?pretty&analyzer=standard&text=J4Kz1%26L
* bvjoQFE9gHC7H<br>
* 可以看到J4Kz1&LbvjoQFE9gHC7H被分成了:j4kz1和lbvjoqfe9ghc7h<br>
* %26是&符号,&?等符号是浏览器特殊符号,你懂的,可以用其它符号代替查看结果。<br>
*/
private static void matchQuery() {
Client client = null;
try {
client = EsUtil.getTransportClient();
QueryBuilder query = QueryBuilders.matchQuery("id",
"wwif56,vp3j4l3gj6vn3h");
SearchResponse response = client.prepareSearch("product")
.setTypes("user").setQuery(query).execute().actionGet();
SearchHits hits = response.getHits();
long total = hits.getTotalHits();
System.out.println("total:" + total);
int len = hits.getHits().length;
System.out.println("len:" + len);
Printer.print(hits);
} catch (Exception e) {
e.printStackTrace();
} finally {
EsUtil.close(client);
}
}
}

termQuery:

package com.syz.es.search;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;
import com.syz.es.util.EsUtil;
public class Term {
public static void main(String[] args) {
termQuery();
}
/**
* 默认的standard analyzer分词规则:<br>
* 去掉大部分标点符号,并以此分割原词为多个词,把分分割后的词转为小写放入token组中。<br>
* 对于not-analyzed的词,直接把原词放入token组中。<br>
* termQuery的机制是:直接去匹配token。<br>
* id=id2,默认分词,id2不分词。<br>
* 以wwIF5-vP3J4l3GJ6VN3h为例:<br>
* id是的token组是[wwif5,vp3j4l3gj6vn3h]<br>
* id2的token组是[wwIF5-vP3J4l3GJ6VN3h]<br>
* 可以预计以下结果:<br>
* 1.termQuery("id", "wwif5"),有值。<br>
* 2.termQuery("id", "vp3j4l3gj6vn3h"),有值。<br>
* 3.termQuery("id2", "wwIF5-vP3J4l3GJ6VN3h"),有值。<br>
*/
private static void termQuery() {
Client client = null;
try {
client = EsUtil.getTransportClient();
QueryBuilder query = QueryBuilders.termQuery("id", "wwif5");
SearchResponse response = client.prepareSearch("product")
.setTypes("user").setQuery(query).execute().actionGet();
SearchHits hits = response.getHits();
long total = hits.getTotalHits();
System.out.println("total:" + total);
int len = hits.getHits().length;
System.out.println("len:" + len);
Printer.print(hits);
} catch (Exception e) {
e.printStackTrace();
} finally {
EsUtil.close(client);
}
}
}

说明:

1.为了方便在全文文本字段中进行这些类型的查询,Elasticsearch首先对文本分析(analyzes),然后使用结果建立一个倒排索引。

2.Elasticsearch使用一种叫做倒排索引(inverted index)的结构来做快速的全文搜索。倒排索引由在文档中出现的唯一的单词列表,以及对于每个单词在文档中的位置组成。

一些其它查询:

package com.syz.es.search;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;import com.syz.es.util.EsUtil;public class MatchBoolean {public static void main(String[] args) {matchBoolean1();matchBoolean2();}private static void matchBoolean1() {Client client = null;try {client = EsUtil.getTransportClient();QueryBuilder query = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("age", 16)).must(QueryBuilders.matchQuery("name", "李四"));SearchResponse response = client.prepareSearch("product").setTypes("user").setQuery(query).get();SearchHits hits = response.getHits();long total = hits.getTotalHits();System.out.println("total:" + total);int len = hits.getHits().length;System.out.println("len:" + len);Printer.print(hits);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}private static void matchBoolean2() {Client client = null;try {client = EsUtil.getTransportClient();QueryBuilder query = QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("age", 16)).must(QueryBuilders.matchQuery("name", "李四"));SearchResponse response = client.prepareSearch("product").setTypes("user").setQuery(query).get();SearchHits hits = response.getHits();long total = hits.getTotalHits();System.out.println("total:" + total);int len = hits.getHits().length;System.out.println("len:" + len);Printer.print(hits);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}
}
package com.syz.es.search;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;import com.syz.es.util.EsUtil;public class Terms {public static void main(String[] args) {termsQuery();}private static void termsQuery() {Client client = null;try {client = EsUtil.getTransportClient();// termsQuery的第二个参数可以是数组,也可以是集合QueryBuilder query = QueryBuilders.termsQuery("age", new int[] {11, 16 });SearchResponse response = client.prepareSearch("product").setTypes("user").setQuery(query).execute().actionGet();SearchHits hits = response.getHits();long total = hits.getTotalHits();System.out.println("total:" + total);int len = hits.getHits().length;System.out.println("len:" + len);Printer.print(hits);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}
}
package com.syz.es.search;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;import com.syz.es.util.EsUtil;public class Prefix {public static void main(String[] args) {prefixQuery();}/*** 以b3IAs@HhVBZPC6tVfyaK为例*/private static void prefixQuery() {Client client = null;try {client = EsUtil.getTransportClient();QueryBuilder query = QueryBuilders.prefixQuery("id2","b3IAs@HhVBZPC6tVfyaK");SearchResponse response = client.prepareSearch("product").setTypes("user").setQuery(query).execute().actionGet();SearchHits hits = response.getHits();long total = hits.getTotalHits();System.out.println("total:" + total);int len = hits.getHits().length;System.out.println("len:" + len);Printer.print(hits);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}
}
package com.syz.es.search;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;import com.syz.es.util.EsUtil;public class Range {public static void main(String[] args) {rangeQuery();}private static void rangeQuery() {Client client = null;try {client = EsUtil.getTransportClient();QueryBuilder query = QueryBuilders.rangeQuery("age").gt(10).lt(20);SearchResponse response = client.prepareSearch("product").setTypes("user").setQuery(query).execute().actionGet();SearchHits hits = response.getHits();long total = hits.getTotalHits();System.out.println("total:" + total);int len = hits.getHits().length;System.out.println("len:" + len);Printer.print(hits);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}
}
package com.syz.es.search;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;import com.syz.es.util.EsUtil;public class Regexp {public static void main(String[] args) {regexpQuery();}private static void regexpQuery() {Client client = null;try {client = EsUtil.getTransportClient();QueryBuilder query = QueryBuilders.regexpQuery("id2","[a-z,A-Z]{5}\\+.*");SearchResponse response = client.prepareSearch("product").setTypes("user").setQuery(query).setFrom(0).setSize(50).execute().actionGet();SearchHits hits = response.getHits();long total = hits.getTotalHits();System.out.println("total:" + total);int len = hits.getHits().length;System.out.println("len:" + len);Printer.print(hits);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}
}
package com.syz.es.search;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;import com.syz.es.util.EsUtil;public class Wildcard {public static void main(String[] args) {wildcardQuery1();wildcardQuery2();}private static void wildcardQuery1() {Client client = null;try {client = EsUtil.getTransportClient();QueryBuilder query = QueryBuilders.wildcardQuery("id", "1*");SearchResponse response = client.prepareSearch("product").setTypes("user").setQuery(query).execute().actionGet();SearchHits hits = response.getHits();long total = hits.getTotalHits();System.out.println("total:" + total);int len = hits.getHits().length;System.out.println("len:" + len);Printer.print(hits);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}private static void wildcardQuery2() {Client client = null;try {client = EsUtil.getTransportClient();QueryBuilder query = QueryBuilders.wildcardQuery("id", "1000?");SearchResponse response = client.prepareSearch("product").setTypes("user").setQuery(query).execute().actionGet();SearchHits hits = response.getHits();long total = hits.getTotalHits();System.out.println("total:" + total);int len = hits.getHits().length;System.out.println("len:" + len);Printer.print(hits);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}
}
package com.syz.es.search;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.metrics.avg.InternalAvg;
import org.elasticsearch.search.aggregations.metrics.sum.InternalSum;import com.syz.es.util.EsUtil;public class Avg {public static void main(String[] args) {avgQuery();}private static void avgQuery() {Client client = null;try {client = EsUtil.getTransportClient();QueryBuilder query = QueryBuilders.matchQuery("name", "张三");SearchResponse response = client.prepareSearch("product").setTypes("user").setQuery(query).addAggregation(AggregationBuilders.avg("age_avg").field("age")).addAggregation(AggregationBuilders.sum("salary_sum").field("salary")).execute().actionGet();SearchHits hits = response.getHits();InternalAvg agg = response.getAggregations().get("age_avg");System.out.println(agg.getName() + "\t" + agg.getValue());InternalSum agg2 = response.getAggregations().get("salary_sum");System.out.println(agg2.getName() + "\t" + agg2.getValue());long total = hits.getTotalHits();System.out.println("total:" + total);int len = hits.getHits().length;System.out.println("len:" + len);Printer.print(hits);} catch (Exception e) {e.printStackTrace();} finally {EsUtil.close(client);}}
}

关于全文搜索elasticsearch中matchQuery和termQuery的区别相关推荐

  1. ElasticSearch的matchQuery与termQuery

    matchQuery与termQuery区别: matchQuery:会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到. termQuery:不会对搜索词进行 ...

  2. 全文搜索 Elasticsearch+analysis-ik

    前言 近期想尝试使用 Elasticsearch + analysis-ik 组合来实现全文搜索,所以需要在自己的Linux服务器上安装Java1.8的环境. 安装Java1.8 使用 yum sea ...

  3. Elasticsearch中ik_max_word和 ik_smart的区别

    目录 ik_max_word和 ik_smart介绍 最佳实践 ik_max_word和 ik_smart介绍 学习过Solr或Elasticsearch的同学都知道IK分词器,它是一个针对中文的分词 ...

  4. ElasticSearch中keyword和text类型区别和模糊查询

    参考文章: https://blog.csdn.net/sfh2018/article/details/118083634 https://blog.csdn.net/w1014074794/arti ...

  5. ElasticSearch中Transient与Persistent的区别

    注: 部分概念介绍来源于网络 transient 临时:这些设置在集群重启之前一直会生效.一旦整个集群重启,这些设置就会被清除. persistent 永久:这些设置永久保存,除非再次被手动修改.是将 ...

  6. ElasticSearch中must和filter的区别

    上图是项目中所使用的ES Java-high-level-client,问题来了,must和filter究竟有什么区别?哪些地方用must?哪些地方用filter? 在官网中的说明其实很明显 matc ...

  7. PostgreSQL SQL 语言:全文搜索

    本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权. 1. 介绍 全文搜索(或者文本搜索)提供了确定满足一个查询的自然语言文档的能力,并可以选择将它们按照与查询的相关度排序.最 ...

  8. 如何使用Elasticsearch在.NET应用程序中实现全文搜索

    目录 为什么选择Elastic search? 示例应用程序 如何写文件 如何查询文件 获得什么 资源资源 在这个简单的教程中,我将提供一个简单的演示来向Elasticsearch读写文档,并为C#应 ...

  9. ElasticSearch中全文搜索(单词搜索、多次搜索、组合搜索和权重搜索)

    全文搜索两个最重要的方面是: 相关性(Relevance) 它是评价查询与其结果间的相关程度,并根据这种相关程度对结果排名的一种能力,这种计算方式可以是 TF/IDF 方法.地理位置邻近.模糊相似,或 ...

最新文章

  1. Skelta BPM.NET 2006 初探
  2. Lex-BERT:超越FLAT的中文NER模型?
  3. 丢失__EVENTTARGET _dopost Asp.net自带隐藏域和脚本的现象
  4. MongoDB(6.mongodb的聚合操作以及高级查询3、排序等)
  5. 【最优解】Leecode 594. 最长和谐子序列——Leecode每日一题系列
  6. oracle数据库查看用户相关语句
  7. mac nginx映射ip和端口_步骤四、nginx反向代理
  8. BlogEngine学习一:操作符重载
  9. media recovery oracle,Oracle非归档模式MediaRecovery错误之--ORA-26040
  10. HDU-1501-Zipper
  11. java range注解_最全的Java Spring注解
  12. Java — set 和 list 集合练习题
  13. 2021年茶艺师(初级)考试及茶艺师(初级)新版试题
  14. 【优化模型】求非齐次线性方程组的通解
  15. MuMu模拟器忘记锁屏密码
  16. vue项目实现更换默认头像功能
  17. 微信小程序 长按事件 删除图片
  18. 手机app显示服务器端异常502,修复 HTTP 502 和 HTTP 503 错误 - Azure App Service | Microsoft Docs...
  19. 《MATLAB 神经网络43个案例分析》:第5章 基于BP_Adaboost的强分类器设计——公司财务预警建模
  20. BZOJ4810 [Ynoi2017]由乃的玉米田

热门文章

  1. Gephi UCI 世行数据 聚合数据 APP分类 Context
  2. 如何使3dMax运行的更快、更稳?
  3. Xcode 报错 xcrun: error: active developer path(/Applications/Xcode.app/Contents/...does not exist问题解决。
  4. Linux (Ubuntu)磁盘管理与文件压缩解压(入门必看)
  5. w5100 资料整理
  6. 阿里巴巴笔试2020/4/20 实习生
  7. 趣图:在马路发现一个 HDMI 接口
  8. stm32上电不复位,需手动复位问题。
  9. Github 标赞8.7k !Mocking Bird,五秒模仿你的声音,支持中文!
  10. 毕设 B站数据分析与可视化 - python 数据分析 大数据