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

PostgreSQL tsvector配置:如何允许特殊字符?,sql,postgresql,Sql,Postgresql,我在PostgreSQL中设置了一个新的文本搜索配置。此配置使用空的停止字文件、DictFile和aff文件 一个简单的测试 SELECT * FROM ts_debug('public.myconfig', 'C++ and C# and PHP'); …除了“C++”和“C#”的词素都是“C”这一事实外,工作(几乎)很好。基本上,我想做的就是确保“C++”的词素是“C++”,而“C#”的词素是“C#”,从而使用户能够查询“C++”。问题是双重的 第一个问题是索引。默认配置使用词干来索

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

一个简单的测试

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

…除了“C++”和“C#”的词素都是“C”这一事实外,工作(几乎)很好。基本上,我想做的就是确保“C++”的词素是“C++”,而“C#”的词素是“C#”,从而使用户能够查询“C++”。

问题是双重的

  • 第一个问题是索引。默认配置使用词干来索引数据,因此您可以得到“C++”和“C#”的词素“C”。您可以使用“simple”配置为数据编制索引,但最终索引中会出现不需要的单词。我所做的是将“C++”转换为“Cplusplus”并对其进行索引。因为“Cplusplus”没有词素,所以它将按原样被合并。通过在索引数据中将“C#”设置为“CSharp”,也可以对“C#”执行相同的操作

  • 第二个问题是搜索。现在索引数据已经正常了,我们需要确保为特殊单词转换搜索词。如果用户键入“C++”,则需要在执行搜索之前将其转换为“Cplusplus”

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

    我已经有一段时间没有使用TSearch了,所以我不确定TSearch是否允许您以与stopwords相同的方式设置和异常列表