一.背景html
項目數據庫中有一張Task表,關聯了不少其餘的表(關聯方式包括一對多,以及一對一)。java
需求是 支持根據其餘表的數據和自己數據進行篩選和排序。git
若是直接使用聯表進行查詢,耗時比較長,用戶反饋使用比較慢,並且搜索條件比較複雜。github
考慮使用Elastic Search 對數據進行處理後再查詢,以提升查詢的性能。sql
二.方案數據庫
採用最通用的ELK方案編程
Step1: 安裝segmentfault
首先安裝java,而後安裝elk,能夠在https://www.elastic.co/start上找到安裝包。nosql
Step2: 運行elasticsearch
直接去對於文件夾下執行命令便可。
Step3: 同步數據
這是最重要的一步,因爲不知道如何將多對一的關係處理成嵌套Document,因此直接Stuff成了一個字符串處理。
而後修改logstash的日誌,能夠參考
https://segmentfault.com/a/1190000014387486
三.查詢
elasticsearch爲各個語言分別提供了客戶端代碼,.net可使用
https://github.com/elastic/elasticsearch-net上提供的nest使用函數式編程來組合查詢。
固然在這以前須要先學習如何使用DSL來進行查詢,參考文獻
https://www.elastic.co/guide/en/elastic-stack/current/index.html
四.Tips
ElasticSearch在進行match查詢的時候默認會使用分詞,對中文的分詞支持不好,可使用ik中文和拼音插件進行處理。
若是隻須要嚴格匹配的話可使用match_pharse
暫時先寫到這裏,等以後用到更多再補充。
(其實我以爲這個需求只要用nosql就能解決的吧)