2017-07-27 40 views
1

我在MySQL的未來結構:ElasticSearch幾個搜索的情況下

  1. 表團體 - idtitleuser_id
  2. 表的關鍵字 - idtitle
  3. 表group_keyword - group_idkeyword_id

我用5個案例搜索:

  1. 由組標題全場比賽title = "keyword"
  2. 按關鍵詞標題全場比賽title = "keyword"
  3. 由組標題部分匹配title like "keyword%"
  4. 由組標題部分匹配title like "%keyword%"
  5. 按關鍵詞標題部分匹配title like "%keyword%"

這些查詢合併爲一個查詢。對於每個子查詢,它會附加一個名爲priority的列,在該列上進行排序。

我的問題是:我應該如何配置ElasticSearch來執行上述情況,或者我應該如何構建查詢以獲取結果?我問,因爲這個查詢在Mysql上很慢,我們做了很多優化,增加了索引,拆分表等等,所有的優化結果都是暫時的。

謝謝

回答

0

你想分析關鍵字字段嗎? 它是否必須是5個不同的情況?

您必須確定所需的可能查詢類型。

由於通配符查詢:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html

管理所有5例搜索(對於非分析領域,雖然這意味着關鍵字子術語並不標記化,ES搜索利用其將defalt分析器的關鍵字屬性除非您指定自定義分析器,否則使用簡單的空白字)。

如果你想要的東西更靈活,性能是不是一個問題(分析的屬性),那麼你可以使用NGRAM分析:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/analysis-ngram-tokenizer.html

這一個標記化的子項,這意味着它取決於打破它在多個字符在你的ngram配置上。

你的文件映射當然應該指定在每種情況下anlyser:

通配符研究==> not_analyzed

NGRAM研究==> NGRAM

PS:注意在瀏覽ES文檔。 ES版本規範是非常重要的,因爲它是版本之間的很多折舊:)。在右側選擇安裝的主要版本,然後瀏覽。

相關問題