簡體   English   中英

在 MariaDB (innodb) 中限制全文搜索

[英]Limit fulltext search in MariaDB (innodb)

我無法快速搜索相當大的(500 萬個條目)表。

這是 MariaDB (10.4.25) 上的 innodb。

my_table的結構如下:

ID 文本
1個 一些文字
2個 更多文字

我現在有一個關於“文本”的全文索引並搜索:

SELECT id FROM my_table WHERE MATCH ('text') AGAINST ("some* tex*" IN BOOLEAN MODE);

這不是超級慢,但可以產生數百萬個結果。 在我的 Java 應用程序中檢索它們需要很長時間,但我需要匹配的 ID。

因此,我想通過我知道只能相關的 id 來限制已經存在的數量,並嘗試了這樣的事情(id 是主索引):

SELECT id FROM my_table WHERE id IN (1,2) AND MATCH ('text') AGAINST ("some* tex*" IN BOOLEAN MODE);

希望它首先限制為 2 個 ID,然后應用全文搜索並快速給我兩個結果。 las,那不是發生的事情,我不明白為什么。

如果我已經知道一些 id 只搜索這些 id 並通過這樣做使查詢更快,我該如何限制查詢?

當您將FULLTEXT (或SPATIAL )索引與某些“常規”索引一起使用時,優化器假定前者運行得更快,因此它首先執行此操作。

此外,針對表的子集運行MATCH並非易事(也許是不可能的)。

兩者合謀說MATCH首先發生。 (當然,您希望做相反的事情。)

有解決方法嗎? 我對此表示懷疑。 特別是如果有很多行的單詞以“some”或“tex”開頭。

要嘗試的一件事是“+”:

MATCH ('text') AGAINST ("+some* +tex*" IN BOOLEAN MODE);

請報告這是否有幫助。

嗯...也許你想要

MATCH (`text`)   -- this
MATCH ('text')   -- NOT this

MariaDB 有兩個特點:

  • 查詢花費的最大時間
  • 訪問的最大行數(可能不適用於 FULLTEXT)

暫無
暫無

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

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