微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cypher 是否可以仅使用部分文本进行语音文本搜索,而不使用弹性搜索?

如何解决Cypher 是否可以仅使用部分文本进行语音文本搜索,而不使用弹性搜索?

假设我有一份财务管理员的工作(j:Job {name: 'financial administrator'})。

许多人对“财务管理员”使用不同的头衔。因此,我希望上述工作成为热门,即使人们只输入“财务”或“管理员并且他们的输入有拼写错误(例如:“财务”)。

CONTAINS 仅在匹配率为 100% 时才给出结果 - 所以没有错别字。

非常感谢!

解决方法

首先,您可以尝试使用全文索引进行模糊匹配,看看是否能解决问题。 一个例子是: 设置索引—— CALL db.index.fulltext.createNodeIndex('jobs',['Job'],['name'],{})

使用模糊匹配查询索引(注意~

CALL db.index.fulltext.queryNodes('jobs','fynancial~')

如果您想进一步使用 Lucene 的语音搜索,那么您可以编写一些 Java 代码来注册自定义分析器。

像这样包含 lucene-analyzers-phonetic 依赖项:

     <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-phonetic</artifactId>
            <version>8.5.1</version>
        </dependency>

然后创建一个自定义分析器:

@ServiceProvider
public class PhoneticAnalyzer extends AnalyzerProvider {


    public PhoneticAnalyzer() {
        super("phonetic");
    }

    @Override
    public Analyzer createAnalyzer() {
        return new Analyzer() {
            @Override
            protected TokenStreamComponents createComponents(String s) {
                Tokenizer tokenizer = new StandardTokenizer();
                TokenStream stream = new DoubleMetaphoneFilter(tokenizer,6,true);
                return new TokenStreamComponents(tokenizer,stream);
            }
        };
    }
}

我使用了 DoubleMetaphoneFilter,但您可以尝试使用其他方法。 打包成jar包,和Lucene phonetic jar一起放到Neo4j的plugin目录下,重启服务器。 然后,使用此分析器创建全文索引:

CALL db.index.fulltext.createNodeIndex('jobs',{analyzer:'phonetic'})

查询索引看起来一样:

CALL db.index.fulltext.queryNodes('jobs','fynancial')

,

花了一段时间,这就是我解决问题的方式。

MATCH (a)-[:IS]->(hs)
UNWIND a.naam AS namelist
CALL apoc.text.phonetic(namelist) YIELD value
WITH value AS search_str,SPLIT('INPUT FROM DATABASE',' ') AS input,a
CALL apoc.text.phonetic(input) YIELD value
WITH value AS match_str,search_str,a
WHERE search_str CONTAINS match_str OR search_str = match_str
RETURN DISTINCT a.naam,label(a)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。