2009-06-18 65 views
0

我在Solr中创建了一个自定义Tokenizer,用于查找命名实体。我希望能够使用这些信息来填充lucene/solr文档中的单独字段。Solr:从Tokenizer填充单独的字段

作为一个例子,我想填充一个名为“locations”的多值字段,其中包含从文本中提取的所有位置名称。要提取位置,首先将文本标记为单词,并确定哪些标记是位置。在这个过程之后,我想为标记器发出标记,但也要填充从文本中提取的所有位置名称的“位置”字段。

根据我所做的研究,无法从Tokenizer或TokenizerFactory访问SolrDocument对象,因此无法从此处填充字段。

我到目前为止提出的解决方案是创建一个自定义的UpdateRequestProcessorFactory来处理文本并提取字段,然后Tokenizer处理文本AGAIN以获取令牌。我想找到一种方法来完成这项工作,并只处理一次文本。

回答

1

我这样做是那么优雅是什么样子你拍摄的方式:

我使用一个命名实体识别,并保存所有的实体在一个单独的文件预处理文件。然后,当我发布到Solr时,我只是从该文件中读取实体并填充实体字段(对于人员,位置和组织而言是不同的)。这可以简化,但由于我已经完成了其他工作的解析,重新使用已有的东西更容易。

0

下面是我认为可以在lucene中工作的一个想法,但我不知道solr中是否有可能。您可以按照您的建议在典型的tokenstream链外标记字符串,然后使用NOT_ANALYZED选项手动将标记添加到文档。您必须分别添加每个令牌,并使用document.add(...)lucene将其视为单个字段进行搜索。