2016-03-08 93 views
0

我在Windows Server 32Bit上使用最新版本的IBM DB2 Express-C版LUW。IBM DB2 TextSearch //语言= AUTO //语言处理

TextSearch-Engine已正确配置并正在运行。

我创建了一个小型测试表,主键id-column是一个varchar列。 varchar列被定义为全文索引。

db2ts "CREATE INDEX db2admin.test_id_dx FOR TEXT ON test(anytext) LANGUAGE AUTO CONNECT TO M2FDEVTS USER xxx USING yyy" 

正如你所看到的,我将language参数设置为AUTO。

检查索引配置与

SELECT * FROM sysibmts.tsindexes 

列 “语言” 被设定为AUTO。

为了安全起见,我将全局配置设置为AUTO。

我不能确定何时将其放入表中的文本具有语言:我

SELECT * FROM sysibmts.TSDEFAULTS 

我的问题检查它。所以我插入了德语和英语内容的行。内容没有在一行中混合。

更新索引后,我做了一些查询。

SELECT SUBSTR(anytext,1,30) FROM test WHERE CONTAINS(anytext, 'spiele', 'QUERYLANGUAGE = de_DE') = 1 

首先,我创建了索引语言mode = auto。 “spiele”一词不是全文栏中任何文字的一部分。但考虑到db2全文索引的语言处理,应该有一些命中。但根本没有结果。

之后我删除了索引并用语言de_DE重新创建索引。更新索引后,我再次触发了相同的查询 - 现在返回一些结果行!

那又怎么了?创建一个索引与language = auto和language = de_DE显然不同。我研究过文档。它清楚地说:

您在yourdb2ts指定区域CREATE INDEXcommand决定 使用来标记或分析索引文件的语言,如果您知道 要编制索引的列中的所有文档都使用特定语言,请在创建文本搜索索引时指定 适用的区域设置。如果您未指定 区域设置,则将使用数据库区域来确定 LANGUAGE的默认设置。要自动扫描文档以确定 区域设置,请在SYSIBMTS.TSDEFAULTS视图中将LANGUAGE属性设置为AUTO。 SYSIBMTS.TSDEFAULTS视图使用属性 - 值对描述文本搜索 的数据库默认值。

非常感谢您的帮助! Oliver

回答

0

好的,解决方案非常简单。我用于测试的句子太短。在这种情况下,DB2无法确定选择哪种语言进行标记。

根据正确的语言或使用更多的单词来创建索引,查询结果如预期的那样。

Oliver