Ответ 1
-
Существует Elasticsearch MinHash Plugin. Вы можете использовать его для извлечения значения 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"] } } } } }'
-
Поместите поле
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.
-
а. Использовать больше похоже на этот запрос можно использовать для поиска типа "как" в поле
minhash_value
:GET /_search { "query": { "more_like_this" : { "fields" : ["minhash_value"], "like" : "KV5rsUfZpcZdVojpG8mHLA==", "min_term_freq" : 1, "max_query_terms" : 12 } } }
б. Вы также можете использовать нечеткий запрос, но он принимает запрос, отличающийся от результата на
2
(максимум).GET /_search { "query": { "fuzzy" : { "minhash_value" : "KV5rsUfZpcZdVojpG8mHLA==" } } }
Подробнее о нечетком запросе здесь.
-
- Или вы можете создать хэш-значение вне elasicsearch (написать код для извлечения хеш-значения), и каждый раз, когда вы индексируете документ, вы можете запустить код и прикрепить значение хэша к индексу, который вы индексируете. И более поздний поиск с хэш-значением с помощью Больше похоже на этот запрос или Fuzzy запрос, как описано выше.
- Наконец, вы можете написать плагин elasticsearch самостоятельно, как указано выше (что соответствует вашему алгоритму хеширования) и сделать тот же шаг выше.