Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
索引solr中长度超过3的单词_Solr_Tokenize - Fatal编程技术网

索引solr中长度超过3的单词

索引solr中长度超过3的单词,solr,tokenize,Solr,Tokenize,我正在Solr(6.5版)中为大型文本段落编制索引 我只需要索引长度超过3个字符(仅限字符)的单词。但需要对数据进行索引。示例-“ask”和“as”不需要,但需要“10”和“101” 实现这一点的一种方法是在stopwords.txt文件中采用所有可能的组合 有人能给我推荐一种更好的方法吗?您可以在fieldType analyzer中配置过滤器 有一个模式过滤器,用于替换匹配的值。可以用空值替换它们。大概是这样的: <fieldType name="text" class="solr.T

我正在Solr(6.5版)中为大型文本段落编制索引

我只需要索引长度超过3个字符(仅限字符)的单词。但需要对数据进行索引。示例-“ask”和“as”不需要,但需要“10”和“101”

实现这一点的一种方法是在stopwords.txt文件中采用所有可能的组合


有人能给我推荐一种更好的方法吗?

您可以在fieldType analyzer中配置过滤器

有一个模式过滤器,用于替换匹配的值。可以用空值替换它们。大概是这样的:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.ASCIIFoldingFilterFactory" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="(\b[a-z]{1,3}\b)" replacement="" replace="all" />
  </analyzer>
</fieldType>

,它看起来符合您的规则。
基本上,这种模式只是抱怨a-z字母大小为1到3的单词(这些字母将被忽略)

另外,我在PatternFilter之前添加了一个小写过滤器和一个ASCIIFoldingFilter(您可能已经配置了),因此模式过滤器不需要抱怨大写和特殊字符


这里有一个关于过滤器的文档,如果你需要更多的信息:

这将替换在AZ-0之外的任何字符,而不考虑单词/令牌的长度——这就是问题所在。询问者希望删除所有短于四个字符的标记,但如果标记是数字,则不删除。您可能可以通过执行
^[^0-9]{1,3}$
来修改它-这取决于仅在索引或查询和索引上使用的用例。询问者希望有一种更好的方法根据特定规则忽略某些标记,这就是我给他的。正如回答中所说,他只需要调整模式以满足他的规则。我不擅长正则表达式,但其他人或他自己可以正确地得到该部分。与此同时,我也在四处寻找。