【问题标题】:FullTextIndex in NexusDB, How to tokenize the searchstringNexusDB 中的 FullTextIndex,如何标记搜索字符串
【发布时间】:2012-11-20 08:21:16
【问题描述】:

我们将 NexusDB 用于小型数据库。我们有一个定义了 FulltextIndex 的表。 索引配置有以下选项:

  • 字符分隔符
  • ccPunctuationDash
  • ccPunctuationOther

用户在编辑框中输入搜索文本,然后使用以下 WHERE 子句构造 SQL 语句(当然,%s 替换为 Editbox.text):

WHERE CONTAINS(FullIdx, ''%s'')

当用户在编辑框中输入多个单词时,这会出错,因为这两个单独的单词应该嵌入到 WHERE 子句中,如下所示:

WHERE CONTAINS(FullIdx, 'word1' and 'word2')

所以我必须解析文本框的值,扫描它的空格并在这些点分割文本。这让我想知道是否可以解析全文索引的每个设置的搜索文本,使用全文索引的实际定义来创建正确的 where 子句。

因此,如果在 FulltextIndex 定义中启用了 ccPunctuationDash,则搜索文本也会在“-”上拆分。

如果你想起来,这和创建索引并标记所有字符串时的过程完全相同......

我的问题:根据 FUlltextIndex 的设置标记搜索字符串的最简单方法是什么?

【问题讨论】:

  • NexusDB 对其新闻组的回应:在源代码中搜索 :-(

标签: delphi full-text-indexing nexusdb


【解决方案1】:

最简单的方法是...创建一个带有字符串字段的空#temporary 表,其全文索引设置与您的真实表相同。将TnxTable.Options 设置为包括dsoAddKeyAsVariantField。将要标记的字符串加载到字符串字段中,然后查看由全文索引索引的表。 Presto,您会显示一个额外的字段,即已排序的标记。您现在可以遍历表以读取令牌。

【讨论】:

  • 感谢您的建议,将此解决方案添加到我们的应用程序路线图中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
相关资源
最近更新 更多