2016-12-10 2 views
7

Я запускаю сервер Elasticsearch.Фильтр или анализатор, чтобы приравнивать английские цифры и арабские цифры

Я хотел бы получить такой запрос, как fifty two meters, чтобы соответствовать документу, содержащему 52 meters.

Есть ли какой-либо плагин (фильтр или анализатор), который преобразует числовые слова в арабские цифры?

+0

Вы можете попробовать использовать [лексема фильтр синоним] (https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html) приравнять все прописано с их числовым эквивалентом. – Val

+0

@Val, правда, но это будет очень долго. Например, мне нужно было бы указать синоним «семьсот двадцать шесть => 726». Я надеялся, что какое-то программное решение будет включено в плагин ES, похожий на PyPI [num2words] (https://pypi.python.org/pypi/num2words). – Garrett

+1

Есть несколько проектов, которые делают это на Java ([здесь] (https://github.com/gulimran/num2words)), поэтому создание фильтра токенов, который его использует, не будет слишком сложным на мой взгляд , Я постараюсь добраться до него на обед, если у меня будет время :-) – Val

ответ

4

В настоящее время нет плагина для elasticsearch для преобразования слов в число.

Я предлагаю вам создать код, который получает исходный запрос в качестве ввода и выводит преобразованный запрос (например: преобразование слов в число) для поиска elasticsearch.

Вы можете использовать this ruby gem (open-source), чтобы преобразовать слова в число и наоборот.

NumbersInWords.in_numbers("nineteen sixty five") 
1965 

И, чтобы сделать вещи проще ruby intergration for elasticsearch может, использоваться, чтобы окончательно запросить elasticsearch и получить результаты.

require 'elasticsearch' 

client = Elasticsearch::Client.new log: true 

client.transport.reload_connections! 

client.cluster.health 

client.search q: 'test' 
Смежные вопросы