Elasticsearch进行模糊匹配
全文搜索:
每个自字符串都需要被分词,形成倒排索引
mastch性能比较高:扫描倒赔索引(表)一旦扫描不到便不需要再搜索
前言:
下面的性能都比较差,属于能不用就不用的类型
前缀搜索
扫描到了,还会继续搜索,知道扫描完整个倒排索引
```
GET my_index/my_type/_search
{
"query": {
"prefix": {
"title": {
"value": "C3"
}
}
}
}
```
通配符搜索
? 一个字符
* 任意个字符
```
GET my_index/my_type/_search
{
"query": {
"wildcard": {
"title": {
"value": "*5*5"
}
}
}
}
```
正则表达式:
[0-9] : 指定范围内的数字
[a-z] : 范围内的字母
. : 一个字符
+ : 前面的正则可以出现一次或多次
```
GET /my_index/my_type/_search
{
"query": {
"regexp":{
"title":"C[0-9].+"
}
}
}
```
通配符和正则表达式查询
wildcard查询和prefix查询类似,也是一个基于词条的低级别查询,
但是它能够让你制定一个模式(Pattern),而不是一个前缀(Prefix)
,它使用标准的shell通配符: ? 来匹配任意字符,* 用来匹配零个或者多个字符.
示例:
es = Elasticsearch(hosts="218.22.29.213", port=9200, timeout=200)
query1 = {"query": {"wildcard": {"crossroadName": "*宿州路*"}}}
query = es.search(index="hefei_crossroad", doc_type="info", body=query1)
value = query["hits"]["hits"]