我不确定为什么标准标记器(由默认标准分析器使用)在这种情况下表现得像这样:
- 如果我使用 system.exe
这个词它生成 token system.exe
.我了解 .
不是断词。
- 如果我使用 system32.exe
这个词它生成 token system
和 exe
.我不明白,为什么它在找到 number
时会断字+ 一个 .
?
- 如果我使用 system32tm.exe
这个词它生成 token system32tm.exe
.与第一个示例一样,它按预期工作,没有将单词分解为不同的标记。
我已阅读 http://unicode.org/reports/tr29/#Word_Boundaries但我还是不明白为什么 number
+ 点 ( .
) 是单词边界
最佳答案
如问题中所述,standard
标记器提供基于 Unicode 文本分割算法的基于语法的标记化,如 Unicode Standard Annex #29 中所述。
规则 http://unicode.org/reports/tr29/#Word_Boundaries是不是 如果你有 letter + dot + letter
就休息一下,见 WB6在上述规范中。所以tm.exe
被保存和system32.exe
被分割。
规范说它总是 split ,除了列出的异常(exception)。异常(exception) WB6和 WB7说它永远不会在字母上 split ,然后是标点符号,然后是字母。规则 WB11和 WB12说它永远不会在数字上 split ,然后是标点符号,然后是数字。然而,没有这样的规则,数字,标点,字母,所以默认规则适用,system32.exe
split 。
关于Elasticsearch 标准分词器行为和单词边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59101540/