Elasticsearch实现类Google高级检索
生活随笔
收集整理的這篇文章主要介紹了
Elasticsearch实现类Google高级检索
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、高級檢索的功能點
通過高級搜索配置搜索項,能更準確的過濾掉不相干信息,獲取最想要的檢索信息。?
以Google搜索為例(截取核心片段):?
二、高級檢索拆分
1、包含以下全部的關鍵詞:
需要分詞處理;?
若需要指定字段,則使用matchQuery實現;?
若無需指定字段的全文檢索,則使用queryStringQuery實現;
2、包含以下的完整關鍵詞 :
需要完整匹配字符,使用wildcardQuery結合”*”實現;
3、包含以下任意一個關鍵詞 :
空格分隔每個關鍵詞,需要將多個詞空格拆分,然后對每個關鍵詞通過should結合wildcardQuery遍歷實現;
4、不包括以下關鍵詞 :
包含以下全部關鍵詞的反面,?
若需要指定字段,則使用must_not結合matchQuery實現;?
若無需指定字段,則使用must_not結合queryStringQuery實現;
5、限定要搜索的網頁的時間是:
限定搜索的開始和結束時間,通過rangequery實現。
6、關鍵詞位置:
根據關鍵詞位置的不同,采用不同的實現;?
關鍵詞位于title字段:指定title進行檢索;?
關鍵詞位于content字段:指定content進行檢索;?
關鍵詞位于全部字段:不指定字段進行檢索,多使用?queryStringQuery實現。
三、DSL高級檢索實現
POST detail_index/_search {"from" : 0,"size" : 10,"query" : {"bool" : {"must" : [{"match" : {"title" : {"query" : "蘋果喬布斯","operator" : "OR","prefix_length" : 0,"max_expansions" : 50,"fuzzy_transpositions" : true,"lenient" : false,"zero_terms_query" : "NONE","boost" : 1.0}}},{"wildcard" : {"title.keyword" : {"wildcard" : "*蘋果總裁庫克*","boost" : 1.0}}},{"range" : {"public_time" : {"from" : "2017-09-07 00:00:00","to" : "2017-09-15 23:59:59","include_lower" : true,"include_upper" : true,"boost" : 1.0}}}],"must_not" : [{"wildcard" : {"title.keyword" : {"wildcard" : "*蘋果梨*","boost" : 1.0}}}],"should" : [{"wildcard" : {"title.keyword" : {"wildcard" : "*蘋果手機*","boost" : 1.0}}},{"wildcard" : {"title.keyword" : {"wildcard" : "*iphoneX*","boost" : 1.0}}}],"disable_coord" : false,"adjust_pure_negative" : true,"boost" : 1.0}},"_source" : {"includes" : ["title","content"],"excludes" : [ ]},"highlight" : {"pre_tags" : ["<span style=\"color:red\">"],"post_tags" : ["</span>"],"fragment_size" : 100,"number_of_fragments" : 5,"require_field_match" : true,"fields" : {"title" : { }}} }以上DSL對應如下:?
總結
以上是生活随笔為你收集整理的Elasticsearch实现类Google高级检索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Elasticsearch6.X 去重
- 下一篇: Elasticsearch6.X 新类型