是否可以为字段配置自定义标记化规则,以便将包含字母和数字的单词分解为单独的标记?例如,我喜欢字符串" 50pc"被分成两个代币" 50"和" pc"。
我可以为每个数字字符创建一个覆盖,将其视为符号,但这会给我三个字" 5"," 0"和" pc",这不是我想要的。
甚至可以使用标记化来执行此操作,还是需要预处理数据?
答案 0 :(得分:2)
Tokenizer overrides旨在将10x4
等表单拆分为10
和4
。没有边界字符的拆分一开始看起来是不可能的。但是......你可以使一个tokenizer覆盖特定于字段。所以这是一个(未经测试的)想法。
admin:database-add-field-tokenizer-override
的字段,将数字字符归类为remove
或punctuation
。根据需要配置字段root,includes和exclude。使用该配置,您仍然可以使用cts:word-query
来匹配50pc
,并使用cts:field-word-query
来匹配50
或pc
但是,预处理可能仍然是处理50pc
的最佳方式。这样你就可以在标记中包含单位,如<pieces xmlns="http://example.com/2014/units" value="50">50pc</pieces>
- 或者沿着那些行包含的东西。从长远来看,这可能会给你更大的灵活性。
答案 1 :(得分:1)
简短回答:不,自定义标记化现在不会给你那么大的灵活性。
考虑是否存在三个令牌“5”,“0”,“pc”实际上是一个问题。这取决于您的应用程序,数据以及您正在进行的查询类型。它会对通配符产生影响,对于较长的数字,您可能会获得更复杂的查询或需要位置以使它们准确无法过滤,因为对于字段查询,数字会变成短语。您将获得比其他情况更长的术语列表,在某些情况下,这可能会导致问题。
答案 2 :(得分:0)
不确定,但这是答案:
tokenizer.wordChars('_', '_');
如果不是,请详细说明。