在Oracle中使用逗号分隔值搜索列

时间:2013-01-09 11:09:25

标签: oracle oracle-text

我正在使用Oracle 11g和Oracle Text作为网络搜索引擎。

我现在已经创建了& text-indexed一个CLOB列Keywords,其中包含以空格分隔的单词。这允许我扩展搜索,因为Oracle Text将返回存储在该列中的一个或多个关键字的行。该列的内容对用户是隐藏的,仅用于“扩展”搜索。这是按预期工作的。

但现在我需要支持多个单词甚至完整的句子。使用当前配置,Oracle Text将仅搜索单个关键字。我如何存储短语并配置Oracle Text以便搜索整个短语(首选精确匹配,但模糊匹配也可以)?

两行的列内容示例(分号分隔值):

"hello, hello; is there anybody out there?; nope;"
"just the; basic facts;"

我发现了一个类似的问题:Searching a column with comma separated values,除了我需要一个带有自由文本搜索功能的Oracle 11g解决方案。

可能的解决方案:

第一个解决方案:我正在考虑重新设计数据库,如下所示。我要制作一张新表Keywords(pkID NUMBER, nonUniqueID NUMBER, singlePhrase VARCHAR2(100 BYTE))。我会将之前的列Keyword更改为KeywordNonUniqueID,这将保留ID(而不是值列表)。在搜索时,我使用新的Keyword表进行INNER JOIN。这个解决方案的问题是,除了短语之外,我将获得包含相同数据的多行。我认为这会破坏排名吗?

第二个解决方案:是否可以将短语作为XML存储在原始Keyword列中,并以某种方式告诉Oracle Text在XML中进行搜索?

第3个解决方案:?

请注意,通常情况下,不会有很多短语(少于100个),也不会很长(单个短语最多可包含5个单词)。

另请注意,我目前正在使用CONTAINS及其一些运算符,以满足我的全文搜索需求。

编辑:此https://forums.oracle.com/forums/thread.jspa?messageID=10791361讨论几乎解决了我的问题,但它也匹配单个单词,而不是整个短语(完全匹配)。

1 个答案:

答案 0 :(得分:1)

Oracle支持默认搜索短语。 在docs我们可以看到这个

  

4.1.4.1包含短语查询

     

如果查询表达式中包含多个单词,则仅分隔   通过空格(没有运算符),单词串被认为是a   短语和Oracle Text在查询期间搜索整个字符串。

     

例如,查找包含该短语的所有文档   国际法,请使用国际法这一短语输入您的疑问。

我是否回答了您的问题或误解了您?

P.S。在我看来,解决方案是转换

  “你好,你好;那里有人吗?;不;”   “只是;基本事实;”

  

“你好,你好,那里有人吗?aa nope aa”“只是一个基本的   事实aa“

并使用CONTAINS搜索短语“那里有人吗?aa”