PostgreSQL tsvector配置:如何允许特殊字符?

时间:2011-05-29 18:55:38

标签: sql postgresql

我在PostgreSQL中设置了一个新的文本搜索配置。此配置使用空停止字文件DictFile和AffFile。

一个简单的测试...

SELECT * 
  FROM ts_debug('public.myconfig', 'C++ and C# and PHP');

......除了'C ++'和'C#'的词汇都是'C'这一事实外,几乎可以正常工作。基本上,我想要做的就是确保'C ++'的词汇是'C ++',而'C#'的词义是'C#',因此使用户能够查询'C ++'。

1 个答案:

答案 0 :(得分:4)

问题是双重的。

  1. 第一个问题是索引编制。默认配置使用词干来索引数据,因此你得到'C ++'和'C#'的词位'C'。您可以使用“简单”配置来索引数据,但最终会在索引中找到不需要的单词。我所做的是将'C ++'转换为'Cplusplus'并将其编入索引。由于'Cplusplus'没有lexeme,它将被原样排除。您可以通过在索引数据中将其设置为“CSharp”来对“C#”执行相同的操作。

  2. 第二个问题是搜索。现在索引数据还可以,我们需要确保转换特殊单词的搜索项。如果用户键入“C ++”,则需要在执行搜索之前将其转换为“Cplusplus”。

  3. 我在DB上创建了一个函数,它接受了一个字符串并转换了特殊术语的所有出现。

    我有一段时间没有使用过TSearch,所以我不确定TSearch是否允许你以与允许停用词相同的方式设置和例外列表。