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