我有一些xml文档,其结构如下:
<root>
<intro>...</intro>
...
<body>
<p>..................
some text CO<sub>2</sub>
.................. </p>
</body>
</root>
现在我想用CO2短语搜索所有结果,并希望在搜索结果中获得上述类型的结果。 为此,我正在使用此查询 -
cts:search
(fn:collection ("urn:iddn:collections:searchable"),
cts:element-query
(
fn:QName("http://iddn.icis.com/ns/fields","body"),
cts:word-query
(
"CO2",
("case-insensitive","diacritic-sensitive","punctuation-insensitive",
"whitespace-sensitive","unstemmed","unwildcarded","lang=en"),
1
)
)
,
("unfiltered", "score-logtfidf"),
0.0)
但是使用这个我无法获得CO<sub>2</sub>
的文档。我只使用简单的短语CO2
获取数据。
如果我将搜索词组替换为CO 2
,那么我只能使用CO<sub>2</sub>
而不是CO2
来获取文档
我希望将CO<sub>2</sub>
和CO2
的合并数据作为搜索结果。
我可以通过任何方式忽略<sub>
,还是有其他方法可以解决这个问题?
答案 0 :(得分:5)
这里的问题是标记化。 “CO2”是单字令牌。 CO&lt; sub&gt; 2&lt; / sub&gt;,即使使用短语,也是两个单词标记的短语:“CO”和“2”。正如“黑鸟”与“黑鸟”不匹配一样,“二氧化碳”也与“二氧化碳”不匹配。短语通过设置只意味着我们愿意寻找跨越&lt; sub&gt;的短语。元素边界。
你不能拼凑CO&lt; sub&gt; 2&lt; / sub&gt;一个令牌,但您可以使用自定义标记化覆盖将“CO2”分解为两个令牌。定义一个字段并将数字的覆盖定义为“符号”。这将使每个数字成为自己的标记,并在该字段的上下文中将“CO2”分解为两个标记。然后,您需要使用字段查询替换单词查询。
您可能不希望将其应用于文档中的任何位置,因此您最好在文档中添加这些化学短语的标记。一般而言字段和标记化覆盖尤其会产生性能成本。字段的内容完全分开索引,因此索引更大,并且标记化覆盖意味着我们必须在摄取时和查询时重新标记。这会减慢一些事情(不是很多)。
答案 1 :(得分:2)