GET /forum/_search
{
"query": {
"match_phrase": {
"title": {
"query": "java spark",
"slop": 1
}
}
}
}
slop
的含义是什么?query string
,搜索文本,中的几个term,要经过几次移动才能与一个document
匹配,这个移动的次数,就是slop
实际举例,一个query string
经过几次移动之后可以匹配到一个document
,然后设置slop
hello world, java is very good, spark is also very good.
java spark,match phrase
,搜不到
如果我们指定了slop
,那么就允许java spark
进行移动,来尝试与doc
进行匹配
java is very good spark is
java spark
java --> spark
java --> spark
java --> spark
这里的slop
,就是3,因为java spark
这个短语,spark
移动了3次,就可以跟一个doc匹配上了slop
的含义,不仅仅是说一个query string terms
移动几次,跟一个doc
匹配上。一个query string terms
,最多可以移动几次去尝试跟一个doc匹配上
slop,设置的是3,那么就ok
GET /forum/_search
{
"query": {
"match_phrase": {
"title": {
"query": "java spark",
"slop": 3
}
}
}
}
就可以把刚才那个doc
匹配上,那个doc
会作为结果返回
但是如果slop
设置的是2,那么java spark
,spark
最多只能移动2次,此时跟doc
是匹配不上的,那个doc
是不会作为结果返回的
做实验,验证slop
的含义
GET /forum/_search
{
"query": {
"match_phrase": {
"content": {
"query": "spark data",
"slop": 3
}
}
}
}
spark is best big data solution based on scala ,an programming language similar to java spark
spark data
--> data
--> data
spark --> data
GET /forum/_search
{
"query": {
"match_phrase": {
"content": {
"query": "data spark",
"slop": 5
}
}
}
}
spark is best big data
data spark
--> data/spark
spark <--data
spark --> data
spark --> data
spark --> data
slop
搜索下,关键词离的越近,relevance score
就会越高,做实验说明
GET /forum/article/_search
{
"query": {
"match_phrase": {
"content": {
"query": "java best",
"slop": 15
}
}
}
}
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.65380025,
"hits": [
{
"_index": "forum",
"_type": "article",
"_id": "2",
"_score": 0.65380025,
"_source": {
"articleID": "KDKE-B-9947-#kL5",
"userID": 1,
"hidden": false,
"postDate": "2017-01-02",
"tag": [
"java"
],
"tag_cnt": 1,
"view_cnt": 50,
"title": "this is java blog",
"content": "i think java is the best programming language",
"sub_title": "learned a lot of course",
"author_first_name": "Smith",
"author_last_name": "Williams",
"new_author_last_name": "Williams",
"new_author_first_name": "Smith"
}
},
{
"_index": "forum",
"_type": "article",
"_id": "5",
"_score": 0.07111243,
"_source": {
"articleID": "DHJK-B-1395-#Ky5",
"userID": 3,
"hidden": false,
"postDate": "2017-03-01",
"tag": [
"elasticsearch"
],
"tag_cnt": 1,
"view_cnt": 10,
"title": "this is spark blog",
"content": "spark is best big data solution based on scala ,an programming language similar to java spark",
"sub_title": "haha, hello world",
"author_first_name": "Tonny",
"author_last_name": "Peter Smith",
"new_author_last_name": "Peter Smith",
"new_author_first_name": "Tonny"
}
}
]
}
}
其实,加了slop
的phrase match
,就是proximity match
,近似匹配
1、java spark
,短语,doc,phrase match
2、java spark
,可以有一定的距离,但是靠的越近,越先搜索出来,proximity match