Lucene 通过带html标记的富文本在Neo4j上进行全文搜索

Lucene 通过带html标记的富文本在Neo4j上进行全文搜索,lucene,neo4j,spring-data-neo4j,Lucene,Neo4j,Spring Data Neo4j,在我的Neo4j应用程序中,我有一个产品实体,其中包含名称和描述字段。这两个字段都用于Lucene上的传统索引 Product.name是一个简单的文本,这里没有问题,但是Product.description可以包含HTML标记和元素 现在我使用StandardAnalyzer(Version.LUCENE_36)作为索引。我应该使用什么分析器来跳过所有HTML元素 如何告诉Neo4J Lucene索引不要在Product.description中使用任何HTML元素?我只想给单词编索引 更新

在我的Neo4j应用程序中,我有一个
产品
实体,其中包含
名称
描述
字段。这两个字段都用于Lucene上的传统索引

Product.name
是一个简单的文本,这里没有问题,但是
Product.description
可以包含HTML标记和元素

现在我使用
StandardAnalyzer(Version.LUCENE_36)
作为索引。我应该使用什么分析器来跳过所有HTML元素

如何告诉Neo4J Lucene索引不要在Product.description中使用任何HTML元素?我只想给单词编索引

更新:

我找到了以下类
HTMLStripCharFilter
,并重新实现了我的分析器,如下所示:

public final class StandardAnalyzerV36 extends Analyzer {

    private Analyzer analyzer;

    public StandardAnalyzerV36() {
        analyzer = new StandardAnalyzer(Version.LUCENE_36);
    }

    public StandardAnalyzerV36(Set<?> stopWords) {
        analyzer = new StandardAnalyzer(Version.LUCENE_36, stopWords);
    }

    @Override
    public final TokenStream tokenStream(String fieldName, Reader reader) {
        return analyzer.tokenStream(fieldName, new HTMLStripCharFilter(CharReader.get(reader)));
    }

    @Override
    public final TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException {
        return analyzer.reusableTokenStream(fieldName, reader);
    }

}
HTMLStripCharFilter
初始化的适当位置


如果我错了,请纠正我。

我添加了以下init方法:

@PostConstruct
    public void init() {
        GraphDatabaseService graphDb = template.getGraphDatabaseService();
        try (Transaction t = graphDb.beginTx()) {
            Index<Node> autoIndex = graphDb.index().forNodes("node_auto_index");
            graphDb.index().setConfiguration(autoIndex, "type", "fulltext");
            graphDb.index().setConfiguration(autoIndex, "to_lower_case", "true");
            graphDb.index().setConfiguration(autoIndex, "analyzer", StandardAnalyzerV36.class.getName());
            t.success();
        }
    }
@PostConstruct
公共void init(){
GraphDatabaseService graphDb=template.getGraphDatabaseService();
try(事务t=graphDb.beginTx()){
Index autoIndex=graphDb.Index().forNodes(“node_auto_Index”);
graphDb.index().setConfiguration(自动索引,“类型”,“全文”);
graphDb.index().setConfiguration(自动索引,“to_lower_case”,“true”);
graphDb.index().setConfiguration(自动索引,“analyzer”,StandardAnalyzerV36.class.getName());
t、 成功();
}
}
并创建了以下类:

public final class StandardAnalyzerV36 extends Analyzer {

    private Analyzer analyzer;

    public StandardAnalyzerV36() {
        analyzer = new StandardAnalyzer(Version.LUCENE_36);
    }

    public StandardAnalyzerV36(Set<?> stopWords) {
        analyzer = new StandardAnalyzer(Version.LUCENE_36, stopWords);
    }

    @Override
    public final TokenStream tokenStream(String fieldName, Reader reader) {
        return analyzer.tokenStream(fieldName, new HTMLStripCharFilter(CharReader.get(reader)));
    }

    @Override
    public final TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException {
        return analyzer.reusableTokenStream(fieldName, reader);
    }

}
公共最终类标准AnalyzerV36扩展了Analyzer{
专用分析仪;
公共标准分析器V36(){
analyzer=新标准分析仪(版本:LUCENE_36);
}
公共标准分析器V36(设置停止字){
analyzer=新的StandardAnalyzer(Version.LUCENE_36,stopWords);
}
@凌驾
公共最终令牌流令牌流(字符串字段名、读卡器){
返回analyzer.tokenStream(fieldName,新的HTMLStripCharFilter(CharReader.get(reader));
}
@凌驾
public final TokenStream reusableTokenStream(字符串字段名、读卡器)引发IOException{
返回analyzer.reusableTokenStream(字段名、读取器);
}
}
现在一切正常。希望它能帮助别人。祝你好运

@PostConstruct
    public void init() {
        GraphDatabaseService graphDb = template.getGraphDatabaseService();
        try (Transaction t = graphDb.beginTx()) {
            Index<Node> autoIndex = graphDb.index().forNodes("node_auto_index");
            graphDb.index().setConfiguration(autoIndex, "type", "fulltext");
            graphDb.index().setConfiguration(autoIndex, "to_lower_case", "true");
            graphDb.index().setConfiguration(autoIndex, "analyzer", StandardAnalyzerV36.class.getName());
            t.success();
        }
    }
public final class StandardAnalyzerV36 extends Analyzer {

    private Analyzer analyzer;

    public StandardAnalyzerV36() {
        analyzer = new StandardAnalyzer(Version.LUCENE_36);
    }

    public StandardAnalyzerV36(Set<?> stopWords) {
        analyzer = new StandardAnalyzer(Version.LUCENE_36, stopWords);
    }

    @Override
    public final TokenStream tokenStream(String fieldName, Reader reader) {
        return analyzer.tokenStream(fieldName, new HTMLStripCharFilter(CharReader.get(reader)));
    }

    @Override
    public final TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException {
        return analyzer.reusableTokenStream(fieldName, reader);
    }

}