首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不使用弹性搜索的情况下,Cypher可以只使用部分文本进行语音文本搜索吗?

在不使用弹性搜索的情况下,Cypher可以只使用部分文本进行语音文本搜索吗?
EN

Stack Overflow用户
提问于 2021-03-03 12:56:33
回答 2查看 93关注 0票数 0

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

许多人对“财务管理员”使用不同的头衔。因此,我希望上面提到的工作很受欢迎,即使人们只键入'financial‘或’管理员‘,他们的输入都有输入(比如:'fynancial')。

仅在匹配为100%时才给出结果,因此没有输入。

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-17 12:44:37

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

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2021-03-06 14:10:01

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

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

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

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

包括如下所示的lucene-analyzers-phonetic依赖项:

代码语言:javascript
复制
     <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-phonetic</artifactId>
            <version>8.5.1</version>
        </dependency>

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

代码语言:javascript
复制
@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,并将其与卢塞尼音箱一起放入Neo4j的插件目录中,并重新启动服务器。然后,使用此分析器创建全文索引:

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

查询索引看起来是一样的:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66457559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档