【问题标题】:Elasticsearch compare long sequence strings with fuzzy queryElasticsearch 将长序列字符串与模糊查询进行比较
【发布时间】:2019-03-22 13:15:07
【问题描述】:

我有两个相似的长字符串序列:

C50FD711C2C43287351892A4D82F44B055F048C46D2C54197AC1D1E921F11E6699C4057C4B93907518E6DCA51A672D3D3E419160DAE276CB7716D11B94D8C3BB2E4A591329B7AF973D17A7F9336342FFAAFD4D

C50FD711C2C43287351892A4D820B5EAC5F048C1E67CAC197AC1D1E921F11C3623C1DCD6493907518E6DCA18CD71016E7FD1160DAE276CB7716D11B94A6B762E4A591329B7AF973D17A7F9336342FFAAFD4D

它的距离是41。 我想找到那些彼此相似的字符串。我开始这样的查询:

GET my_index/_type/_search
{
"query": {
        "fuzzy" : {
            "sequence.keyword": {
                "value": "C50FD711C2C43287351892A4D820B5EAC5F048C1E67CAC197AC1D1E921F11C3623C1DCD6493907518E6DCA18CD71016E7FD1160DAE276CB7716D11B94A6B762E4A591329B7AF973D17A7F9336342FFAAFD4D",
                "boost": 1.0,
                "fuzziness": 50,
                "prefix_length": 10,
                "max_expansions": 200
            }
        }
    }
}

我尝试了sequence.keyword 和sequence,该字段是文本类型和关键字类型。 但是,它没有在我的索引中找到其他类似的序列字符串。为什么?

【问题讨论】:

    标签: elasticsearch sequence fuzzy-search


    【解决方案1】:

    答案很简单。允许的最大编辑距离为 2(可以在 source code for the Fuzziness class 中看到

    您可以尝试使用更简单的值,如果您索引AAAAAA 并尝试使用fuzziness: 3 搜索AAABBB,您将一无所获。

    【讨论】:

    • 好的,谢谢你的回答,为什么他们不允许更多?因为那时编译文件需要很长时间?是否有用于 Node.js 的 elasticsearch API 允许搜索更大的编辑距离?或者我是否必须实现自己的 levenshtein 距离(或来自某个库),然后手动比较每个文档?
    • 允许更大的编辑距离[会扼杀相关性]()。我正在使用fast-levenshtein node.js 库,效果很好。 ES 不需要这样做。
    • 好的,我会尝试一下,谢谢,也许还有一个问题:如果你想用这个库比较大约 200000 份甚至更多(约 200 万份)文件,你能告诉我这是否可行,如果你必须进行 n*(n-1) /2 比较吗?这需要多长时间?
    • 我完全不知道,这取决于很多因素,你的硬件就是其中之一。您是否需要将一个值与 200K 或 200K 值中的每一个进行比较?
    • 我必须将每个 200K 值相互比较。因为我想找到文件的副本。这些文档具有与相似文档相似的 minhash Hashkey(基于散列内容)。
    猜你喜欢
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2017-10-22
    • 2020-05-14
    • 2016-02-12
    相关资源
    最近更新 更多