gpt4 book ai didi

java - 模仿 Elasticsearch MatchQuery

转载 作者:太空狗 更新时间:2023-10-29 22:35:10 25 4
gpt4 key购买 nike

我目前正在编写一个程序,该程序当前使用 elasticsearch 作为后端数据库/搜索索引。我想模仿 /_search endpoint 的功能,目前使用匹配查询:

{
"query": {
"match" : {
"message" : "Neural Disruptor"
}
}
}

做一些示例查询,在大量 World of Warcraft database 上产生了以下结果:

   Search Term          Search Result      
------------------ -----------------------
Neural Disruptor Neural Needler
Lovly bracelet Ruby Bracelet
Lovely bracelet Lovely Charm Bracelet

看了elasticsearch的文档,发现match查询还是比较复杂的。我可以在 java 中仅使用 lucene 模拟匹配查询的最简单方法是什么? (好像是在做一些模糊匹配,还有找term)

为 MatchQuery(我相信 org.elasticsearch.index.search.MatchQuery)导入 elasticsearch 代码似乎并不那么容易。它被大量嵌入到 Elasticsearch 中,看起来不像是可以轻易拔出的东西。

我不需要完整的证明“必须完全匹配 elasticsearch 匹配的内容”,我只需要一些接近的东西,或者可以模糊匹配/找到最佳匹配的东西。

最佳答案

发送到 _search 端点的 q= 参数的任何内容都由 query_string 查询(不是 org .elasticsearch.index.search.MatchQuery) 理解 Lucene expression syntax .

查询解析器语法是在 Lucene 项目中使用 JavaCC 定义的可以找到语法 here如果你想看看。最终产品是一个名为 QueryParser 的类(见下文)。

ES源码里面负责解析查询字符串的类是QueryStringQueryParser委托(delegate)给 Lucene 的 QueryParser类(由 JavaCC 生成)。

所以基本上,如果您获得与传递给 _search?q=... 的内容等效的查询字符串,那么您可以将该查询字符串与 QueryParser.parse("query -string-goes-here") 并仅使用 Lucene 运行具体化的 Query

关于java - 模仿 Elasticsearch MatchQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48886610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com