我正在尝试将 lucene tokenizer 迁移到 apache solr。我已经TokenizerFactory在 lucene 上为每个字段类型写过,比如标题、正文等。在 lucene 中,有一种方法可以将TokenStream添加到文档中的字段。在 solr 中,我们必须制作自定义的 Tokenizer/Filter 才能使用 lucene。我在特定领域遇到问题,我已经研究了许多博客和书籍,但这些都无法解决我的问题。在大多数博客和书籍中,他们使用 string,int 直接到 fieldtype。
我已经为 apache solr 构建了自定义 TokenFilterFactory 并放置在我的 schema.xml 中,如下所示
<fieldType name="text_reversed" class="solr.TextField">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="analyzer.TextWithMarkUpTokenizerFactory"/>
<filter class="analyzer.ReverseFilterFactory" />
</analyzer>
当我尝试在 solr 上索引文档时
TextWithMarkUp textWithMarkUp = //get from method
SolrInputDocument solrInputDocument = new SolrInputDocument();
solrInputDocument.addField("id", new Random().nextDouble());
solrInputDocument.addField("title", textWithMarkUp);
在 Apache Solr 管理面板上,结果将如下所示
{
"id":"0.4470506508669744",
"title":"com.xyz.data:[text = Several disparities are highlighted in the new report:\n\n74 percent of white male students said they felt like they belonged at school., tokens.size = 24], tokens = [Several] [disparities] [are] [highlighted] [in] [the] [new] [report] [:] [74] [percent] [of] [white] [male] [students] [said] [they] [felt] [like] [they] [belonged] [at] [school] [.] ",
"_version_":1607597126134530048
}
我无法在我的自定义 TokenStream 上获得 textWithMarkUp 实例,这将阻止我像之前使用 lucene 那样扁平化给定对象。在 lucene 中,我曾经在创建自定义 TokenStream 实例后设置 textWithMarkUp 的实例。下面是我的 textWithMarkUp 实例的 json 版本
{
"text": "The law, which was passed by the Louisiana Legislature and signed by Gov.",
"tokens": [
{
"category": "Determiner",
"canonical": "The",
"ids": null,
"start": 0,
"length": 3,
"text": "The",
"order": 0
},
//tokenized/stemmed/tagged all the words
],
"abbreviations": [],
"essentialTokenNumber": 12
}
我遵循了TextWithMarkUpTokenizerFactory类的所有实现,但是一旦我们在 solr 上的 lib 文件夹下加载了 jar,Solr 将完全控制工厂类。
那么有没有什么方法可以在 solr 的索引时间内设置给定的实例?我研究了更新请求处理器。无论如何这可以解决我的问题吗?
拉丁的传说
相关分类