忽略 cts:search 中的元素

Ignore elements in cts:search

我有一些 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> 吗,或者有其他方法可以解决这个问题吗?

您似乎要添加 phrase-through 配置。

示例:

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

<b> 上的短语将被索引为“成为或不成为

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

您不能将 CO2 拼接成一个标记,但您可以使用自定义标记化覆盖将 "CO2" 分成两个标记。定义一个字段并将数字的覆盖定义为 'symbol'。这将使每个数字成为自己的标记,并在该字段的上下文中将 "CO2" 分成两个标记。然后,您需要用字段词查询替换词查询。

您可能不希望它应用于文档中的任何地方,因此您最好在文档中围绕这些类型的化学短语添加标记。一般字段和特别是标记化覆盖将以性能成本为代价。字段的内容完全单独索引,因此索引更大,标记化覆盖意味着我们也必须在摄取和查询时重新标记。这会稍微减慢速度(不会很多)。