代码之家  ›  专栏  ›  技术社区  ›  Marc

%book%的全文目录/索引搜索

  •  16
  • Marc  · 技术社区  · 16 年前

    我试着用我的头脑来思考如何搜索出现在单词/表达式中间的内容,比如搜索“like%book%”,但是在SQL Server(2005)全文目录中。

    我该怎么做?似乎两者都是 CONTAINS FREETEXT 真的不支持通配符 开始 一个搜索表达式-那真的是吗?

    我本可以想象 FREETEXT(*, "book") 会发现里面有“书”的东西,包括“重新煮过的”之类的。

    6 回复  |  直到 12 年前
        1
  •  15
  •   Lance Fisher    14 年前

    很遗憾,CONTAINS只支持前缀通配符:

    CONTAINS(*, '"book*"')
    
        2
  •  7
  •   Tomalak    16 年前

    SQL Server全文搜索基于将文本标记为单词。没有比单词更小的单位,所以你能找到的最小的东西就是单词。

    你可以用 prefix searches 要查找以特定字符开头的匹配项,这是可能的,因为单词列表是按字母顺序排列的,服务器所要做的只是扫描列表以查找匹配项。

    使用 LIKE '%book%' 从句可能同样快(或慢)。

        3
  •  3
  •   Craig    16 年前

    如果你想做一些认真的全文搜索,那么我会(并且已经)使用Lucene.Net。MS-SQL全文搜索除了基本功能外,似乎从来没有像现在这样工作得那么好。

        4
  •  1
  •   Jake H.    13 年前

    这里有一个建议是解决通配符限制的方法。创建一个计算列,该计算列包含相同的内容,但与正在搜索的列相反。

    例如,如果要搜索名为“ProductTitle”的列,请创建名为ProductsRev的列。然后将该字段的“计算列规范”值更新为:

    (反面([ProductTitle]))

    在搜索中包含“ProductsRev”列,现在您应该能够返回在单词开头支持通配符的结果。祝你好运!!

        5
  •  1
  •   jerry    12 年前

    全文有一个表,列出了引擎找到的所有单词。它的行数应该比全文索引表少几个数量级。您可以从该表中选择“where field like'%book%'”以获取其中包含“book”的所有单词。然后使用该列表编写全文查询。它很笨重,但它可以工作,在速度部门也可以。然而,当你这样做的时候,最终你使用全文是错误的。实际上,最好让这些功能请求的来源了解全文正在做什么。你想让他们明白它想做什么,这样他们就能从全文中获得高价值。例如,只在单词末尾使用通配符,这意味着要考虑有序列表中的单词。

        6
  •  0
  •   Qsebas    11 年前

    为什么不用C语言编写一个程序集来计算所有不重复的sufixes呢。例如,如果您有文本“e a t t he red meat”,则可以将其存储在字段“eat at the he e red e d d meat”(注意,不必再添加eat at and t)ind中,然后在此字段中使用全文搜索。一个可以用Csharp轻松编写的函数

    x)我知道看起来。。。这是个工作区 x)我知道我在插入/更新中增加了开销。。。。仅当除了搜索功能的改进之外,此开销不重要时才合理 x)我知道存储数据的大小也有开销。

    但我很确定那会很快