我有一些具有如下结构的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>还是有其他方法来解决此问题? 最佳答案 这里的问题是 token 化。 “CO2”是一个单词标记。 CO 2 ,即使带有词组直通,也是两个单词标记的词组:“CO”和“2”。正如“黑鸟”不匹配“黑鸟”一样,“CO2”也不匹配“CO 2”。词组直通设置仅表示我们愿意寻找一个跨越元素边界的词组。您不能将CO 2 拼接在一起成为一个 token ,但是您可以使用定制的 token 化替代将“CO2”分解为两个 token 。定义一个字段并将数字的替代定义为“符号”。这将使每个数字成为自己的 token ,并将在该字段的上下文中将“CO2”分为两个 token 。然后,您需要将单词查询替换为字段单词查询。您可能不希望将其应用于文档中的任何位置,因此最好在文档中的此类化学短语周围添加标记。一般的字段,特别是记号化的覆盖将以性能为代价。字段的内容完全分开索引,因此索引更大,并且标记化覆盖意味着我们也必须在摄取时和查询时都重新标记。这会使事情变慢一些(不是很多)。关于full-text-search - 忽略cts:search中的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33536381/
10-16 14:30