代码之家  ›  专栏  ›  技术社区  ›  Sessiz Saat

除了使用fullsearch,我如何在数据库中高效地搜索数据

  •  2
  • Sessiz Saat  · 技术社区  · 15 年前

    我想在DB的某个表或视图中搜索一个句子(单词组合)。我不想使用数据库的Fultext搜索属性。有没有其他有效的方法?

    4 回复  |  直到 15 年前
        1
  •  2
  •   Learning    15 年前

    没有比全文搜索更高效的了。

    喜欢

        2
  •  2
  •   gahooa    15 年前

    如果不使用索引,数据库必须执行“全表扫描”。这相当于你一页一页地翻阅一本书来找到你需要的东西。

    也就是说,计算机比人类快得多。这实际上取决于系统的负载大小。使用MySQL,我们成功地在lead信息表上实现了一个搜索系统。问题的本质是普通索引(包括全文)无法解决的问题。所以我们 设计它 使用全表扫描供电。

    这涉及使用搜索数据创建尽可能窄的表,并使用相关但非搜索数据将它们连接到一个较大的表中。

    如果您的数据需要超过6位的记录,您可能希望使用全文索引重新评估,或者对反向索引进行一些研究。


    编辑:

    搜索查询是使用PHP类生成的。它们只是:

    -- DataTable is the big table that holds all of the data
    -- SearchTable is the narrow table that holds the bits of searchable data
    
    SELECT 
      MainTable.ID, 
      MainTable.Name, 
      MainTable.Whatever 
    FROM 
      MainTable, SearchTable 
    WHERE 
      MainTable.ID = SearchTable.ID 
      AND SearchTable.State IN ('PA', 'DE')
      AND SearchTable.Age < 40
      AND SearchTable.Status = 3
    

    本质上,这两个表是通过主键连接的(fast),而过滤是通过对SearchTable进行全表扫描来完成的(相当快)。我们使用的是MySQL。

    让我知道这是否有帮助。

        3
  •  1
  •   renegadeMind    15 年前

    如果您正在使用JAVA,请查看 Lucene

    Lucene.net ,它将最小化对数据库的搜索查询调用。

    http://incubator.apache.org/lucene.net/

    Lucene.Net是一个源代码, 每个类的类、每个API的API和 Java Lucene的算法端口 搜索引擎到C#和.NET 利用Microsoft.NET的平台 框架

    Lucene.Net坚持API和 Lucene的实现。API 名称和类名是相同的 为了给予而保存 Net的外观和感觉# 语言和.NET框架。对于 例如,该方法在中命中.length()

    除了API和类之外 Java算法C#的端口 Lucene被移植到C#Lucene。这 表示使用Java创建的索引 Lucene前后兼容 与C#Lucene;在阅读方面,, 写作和更新。事实上是一个Lucene 索引可以同时搜索和编辑 使用JavaLucene和C更新#

        4
  •  0
  •   Kristen    15 年前

    您可以将文本拆分为单独的单词,将它们放在单独的表中,并使用该表查找包含搜索句子中所有单词的PK ID[即,但不一定按正确的顺序],然后仅在这些行中搜索句子。应避免每次都进行表扫描。

    请询问是否需要我进一步解释