当前位置: 首页 > 知识库问答 >
问题:

Solr中的索引:修正分析器以不产生大量的术语

廉雅惠
2023-03-14

我正试图通过运行以下代码来索引nutch抓取的数据:

bin/nutch index -D solr.server.url="http://localhost:8983/solr/carerate" crawl/crawldb -linkdb crawl/linkdb crawl/segments/2016*

一开始它工作得很好。我索引了我的数据,发送了一些查询,并收到了很好的结果。但是我再次运行爬行,这样它就可以获取更多的页面,现在当我运行nutch index命令时,我会面对

我不是专家,所以我不确定如何在不搞砸其他东西的情况下纠正分析器。我读到我可以:1。使用(在索引分析器中)一个LengthFilterFactory,以便过滤掉那些不在请求长度范围内的令牌。2.(在索引分析器中)使用TruncateTokenFilterFactory来修复索引标记的最大长度

但是模式中有很多分析器。是否应该更改定义的分析器?如果是,因为内容和其他字段的类型都是text_general,这不会影响所有这些字段吗?

有人知道我该怎么解决这个问题吗?如果有任何帮助,我将不胜感激。

顺便说一句,我使用的是nutch 1.11和solr 6.0.0。

共有1个答案

明阳旭
2023-03-14

假设您使用与Nutch捆绑在一起的schema.xml作为Solr安装的基本模式,基本上只需要将这些筛选器(LengthFilterFactoryTruncateTokenFilterFactory)添加到Text_General字段类型中。

text_generalfieldtype(https://github.com/apache/nutch/blob/master/conf/schema.xml#l108-l123)的初始定义开始,您需要将以下内容添加到 部分:

...
<analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <!-- remove long tokens -->
    <filter class="solr.LengthFilterFactory" min="3" max="7"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
...

这也可以使用相同的语法应用于query分析器。如果要使用TruncateTokenFilterFactory筛选器,只需将添加的行替换为:

 <filter class="solr.TruncateTokenFilterFactory" prefixLength="5"/>

此外,不要忘记根据您的需要调整每个筛选器的参数(minmax)和truncateTokenfilterFactoryprefixlengt

回答您的其他问题:是的,这将影响所有text_general类型的字段,但这并不是问题,因为如果在任何其他字段中发现另一个超长项,将引发相同的错误。如果您仍然希望仅针对content字段隔离此更改,只需使用新名称创建一个新的fieldtype(truncated_text_general,例如,只需复制并粘贴整个fieldtype节并更改name属性),然后更改content字段的类型(https://github.com/apache/nutch/blob/master/conf/schema.xml#l339)以匹配新创建的

也就是说,只需为筛选器选择正常的值,以避免从索引中遗漏大量术语。

 类似资料:
  • 问题内容: 我在Elasticsearch上遇到问题,我不希望对索引项进行分析。但是elasticsearch有一些默认设置,可以在空间上标记它。因此,我的方面查询未返回我想要的结果。 我读到索引类型的属性应该工作。但是问题是我事先不知道我的文档结构。我会在不知道表结构的情况下将随机MySQL数据库索引到elasticsearch。 我如何设置elasticsearch,使其默认情况下会一直使用,

  • 本文向大家介绍Asp.Net中索引器的用法分析,包括了Asp.Net中索引器的用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了Asp.Net中索引器的用法。分享给大家供大家参考。具体如下: 索引器定义类似于属性,但其功能与属性并不相同.索引器提供一种特殊的方法编写get和set访问器.属性可以像访问字段一样访问对象的数据,索引器可以使用户像访问数组一样访问类成员. 一、索引器特性

  • 我用cmd删除了映射 在我的配置文件中,我定义了如下索引:, 并尝试创建一个新的映射,但我得到了错误 {“error”:{“root_cause”:[{“type”:“index_not_found_exception”,“reason”:“no-this index”,“resource.type”:“index_or_alias”,“resource.id”:“logstash_log*”,“

  • Lucene提到- 但是我们可以通过IndexWriter.setMaxFieldLength(int)对其进行配置。 我在ElasticSearch-http://localhost:9200/twitter中创建了一个索引,并发布了一个包含40,000个术语的文档。 映射- 我用message字段索引了一个文档,有40,000个术语-message:“text1text2....text400

  • 问题内容: 根据Mongoose 文档中关于和/的内容: 当您的应用程序启动时,Mongoose会自动调用架构中每个已定义的索引。虽然有利于开发,但建议在生产中禁用此行为,因为创建索引会严重影响性能。通过将架构选项设置为false来禁用该行为。 这似乎指示从Mongoose删除自动索引,然后再部署以优化Mongoose,而从指示Mongo在应用程序启动时遍历所有索引开始,这似乎是有道理的。 在生产

  • 我已经通过了lucene索引机制。我有一些疑问,我找不到一个直截了当的答案,我仍然对我在几篇参考文献中的阅读感到困惑。 考虑使用Lucene对数据库表进行索引。 假设该表有10列,其中很少有caseid、modifiedby、modifiedtime、casename、legalname等。。。 现在,如果我创建一个索引的情况下,那么在搜索是不是可以搜索的基础上修改字段??? 假设我在2列case