0

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

  • 字符分隔符
  • ccPunctuationDash
  • cc标点符号其他

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

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

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

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

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

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

如果您想到它,它与创建索引并标记所有字符串时的过程完全相同......

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

4

1 回答 1

4

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

于 2013-01-30T03:07:36.363 回答