有没有允许在 Elasticsearch 上使用 LSH 的插件?如果是的话,您能否指出该位置并告诉我如何使用它?
谢谢
编辑:
我发现ES使用了MinHash插件。我怎样才能用这个来比较文件呢?查找重复项的最佳设置是什么?
-
有一个Elasticsearch MinHash 插件 https://github.com/codelibs/elasticsearch-minhash。您可以在每次索引文档时使用它提取 minhash 值,并在以后通过 minhash 查询文档。
-
安装 MinHash 插件:
$ $ES_HOME/bin/plugin install org.codelibs/elasticsearch-minhash/2.3.1
-
创建索引时添加 minhash 分析器:
$ curl -XPUT 'localhost:9200/my_index' -d '{
"index":{
"analysis":{
"analyzer":{
"minhash_analyzer":{
"type":"custom",
"tokenizer":"standard",
"filter":["minhash"]
}
}
}
}
}'
-
Put minhash_value
字段到索引映射:
$ curl -XPUT "localhost:9200/my_index/my_type/_mapping" -d '{
"my_type":{
"properties":{
"message":{
"type":"string",
"copy_to":"minhash_value"
},
"minhash_value":{
"type":"minhash",
"minhash_analyzer":"minhash_analyzer"
}
}
}
}'
- 将文档添加到使用 minhash 分析器创建的索引时,会自动计算 minhash 值。
-
a. 使用更多类似此查询 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html可用于在minhash_value
field:
GET /_search
{
"query": {
"more_like_this" : {
"fields" : ["minhash_value"],
"like" : "KV5rsUfZpcZdVojpG8mHLA==",
"min_term_freq" : 1,
"max_query_terms" : 12
}
}
}
b.您还可以使用模糊查询 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html但它接受的查询与结果不同2
(最大限度)。
GET /_search
{
"query": {
"fuzzy" : { "minhash_value" : "KV5rsUfZpcZdVojpG8mHLA==" }
}
}
您可以找到有关模糊查询的更多信息here https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#fuzziness.
- 或者,您可以在 elasicsearch 外部创建哈希值(编写代码来提取哈希值),每次索引文档时,您都可以运行代码并将哈希值附加到您正在索引的文档。然后使用哈希值进行搜索更多类似此查询 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html or 模糊查询 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html如上所述。
- 最后但并非最不重要的一点是,您可以像上面那样自己编写elasticsearch插件(适合您的哈希算法)并执行上面相同的步骤。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)