2

我有一些具有如下结构的 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>,还是有其他方法可以解决这个问题?

4

2 回答 2

5

这里的问题是标记化。“CO2”是一个单词标记。CO<sub>2</sub>,即使是短语直通,也是两个单词标记的短语:“CO”和“2”。正如“blackbird”不匹配“black bird”一样,“CO2”也不匹配“CO 2”。短语通过设置只是意味着我们愿意寻找跨越 <sub> 元素边界的短语。

您不能将 CO<sub>2</sub> 拼接到一个标记中,但您可以使用自定义标记化覆盖将“CO2”分解为两个标记。定义一个字段并将数字的覆盖定义为“符号”。这将使每个数字都有自己的标记,并将在该字段的上下文中将“CO2”分解为两个标记。然后,您需要将 word-query 替换为 field-word-query。

您可能不希望这适用于文档中的任何位置,因此您最好在文档中围绕这些化学短语添加标记。一般的字段,特别是标记化覆盖,都会以性能为代价。字段的内容完全独立索引,因此索引更大,并且标记化覆盖意味着我们也必须重新标记化,无论是在摄取时还是在查询时。这会使事情变慢一点(不是很多)。

于 2015-11-05T15:13:22.470 回答
2

您似乎想要添加短语通过配置。

例子:

<p>to <b>be</b> or not to be</p> 

一个短语通过<b>将被索引为“ to be or not to be

于 2015-11-05T05:58:18.830 回答