簡體   English   中英

MySQL(全文?)搜索產品

[英]Mysql (fulltext?) search for products

我正在構建一個非常簡單的產品目錄,該產品目錄將產品存儲在mysql表中,並且我想盡快(且盡可能相關)搜索產品。 產品數據庫將非常大(大約50萬個產品),這就是為什么不使用索引的使用“頂”的搜索非常慢的原因。

我有很多字段,但我要搜索的唯一字段是:

  • product_id = bigint
  • 標題= varchar(255)
  • 說明=文字

我嘗試嘗試全文搜索,但是存在一些問題:

  • 我無法按product_id進行搜索,因為它是大整數並且無法在全文索引內建立索引(有時用戶知道產品的ID)
  • 如果我搜索“ Meter XY-123”,即使單個產品的標題和說明都包含兩個詞(“ meter”和“ xy-123”),也不會獲得搜索結果
  • 我無法搜索子字符串-例如,如果產品標題為“ Foobar 123”,則即使用戶搜索,也應返回該子字符串:
    • foo bar 123
    • 酒吧123
    • foob​​ar 12
    • 等等
  • 還應按某種相關性排序返回結果。例如,如果我有兩個產品“ foobar 123”和“ foobar 456”,並且用戶搜索“ foobar 4”,則應同時返回兩個產品(匹配任何單詞),但第二個產品應該比第一個(不包含數字4)排名更高(因為它也包含數字4)。
  • 產品還應該根據在哪個字段中找到該值進行排序。在這種情況下,product_id字段的權重大於標題的權重,而標題的權重也大於說明的權重。 例如,如果用戶搜索“ 1234”,則:
    • 排名第一的產品應該是具有product_id 1234的產品
    • 之后,標題中應該包含“ 1234”的排名產品
    • 之后在說明中包含該編號的產品

像這樣在此表上進行搜索的最佳方法是什么? 對於我而言,提供良好結果的唯一方法是拆分查詢字符串,並使用“ like”運算符為每個字符串查詢多個查詢,並以某種方式計算權重,但是此解決方案的運行速度非常慢(單個查詢甚至超過15秒)太慢了)。

我不希望僅使用單個查詢就能實現所有功能,但是我正在尋找一種快速且盡可能相關的解決方案。 如果這意味着建立某種自定義單詞索引或類似的內容,我也願意這樣做,那么我只需要一個如何管理它的想法?

謝謝!

我們將搜索遷移到Sphinx。現在,我們需要微調結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM