我在PostgreSQL中设置了一个新的文本搜索配置。此配置使用空停止字文件DictFile和AffFile。
一个简单的测试...
SELECT *
FROM ts_debug('public.myconfig', 'C++ and C# and PHP');
......除了'C ++'和'C#'的词汇都是'C'这一事实外,几乎可以正常工作。基本上,我想要做的就是确保'C ++'的词汇是'C ++',而'C#'的词义是'C#',因此使用户能够查询'C ++'。
答案 0 :(得分:4)
问题是双重的。
第一个问题是索引编制。默认配置使用词干来索引数据,因此你得到'C ++'和'C#'的词位'C'。您可以使用“简单”配置来索引数据,但最终会在索引中找到不需要的单词。我所做的是将'C ++'转换为'Cplusplus'并将其编入索引。由于'Cplusplus'没有lexeme,它将被原样排除。您可以通过在索引数据中将其设置为“CSharp”来对“C#”执行相同的操作。
第二个问题是搜索。现在索引数据还可以,我们需要确保转换特殊单词的搜索项。如果用户键入“C ++”,则需要在执行搜索之前将其转换为“Cplusplus”。
我在DB上创建了一个函数,它接受了一个字符串并转换了特殊术语的所有出现。
我有一段时间没有使用过TSearch,所以我不确定TSearch是否允许你以与允许停用词相同的方式设置和例外列表。