2015-05-13 3 views
0

В настоящее время я использую собственный анализатор с установленным токенизатором (\W|_)+ Таким образом, каждый термин имеет только буквы и разбивается на любую не букву. В качестве примера у меня есть документ с содержимым [dbo].[Material_Get], а другой - с dbo.Another_Material_Get. Я хочу, чтобы иметь возможность искать «Material_Get» и иметь удар по обоим документам, но если я положу поиск «[Material_Get]», он по-прежнему попадает на dbo.Another_Material_Get, хотя в нем нет скобок. Также, если я ищу «Material Get» (в цитированном поиске), я не должен получать никаких хитов, потому что ни у кого из них нет этой фразы.ElasticSearch поиск специальных символов с анализатором рисунков

Я мог бы обосноваться для анализатора/токенизатора, который мог бы найти всякий раз, когда есть входная строка в любом месте файла, даже если у него есть другие вещи рядом с ним. Например, поиск «aterial_get» будет соответствовать в обоих. Можно ли сделать одно из моих дел?

ответ

1

Из того, что вы объяснили, я получил то, что вы хотите выполнить частичные совпадения, также как и поиск «aterial_get».

Чтобы удовлетворить все ваши требования, вам необходимо изменить отображение своего поля, чтобы в анализаторе было ngram token filter и без удаления специальных символов. Анализатор образца может выглядеть

{ 
    "settings":{ 
    "analysis":{ 
     "analyzer":{ 
     "partialmatch":{ 
      "type":"custom", 
      "tokenizer":"keyword", 
      "filter":[ "lowercase", "ngram" ] 
     } 
     }, 
     "filter":{ 
     "ngram":{ 
      "type":"ngram", 
      "min_gram":2, 
      "max_gram":15 
     } 
     } 
    } 
    } 
} 

и определить в вашем картографировании для your_field анализатора «partialmatch», определенного выше. Вы можете изменить значения min_gram и max_gram в соответствии с вашими потребностями.

С помощью этого отображения вы можете сделать обычный поиск термина как ниже

{ 
    "term": { 
     "your_field": "aterial_get" 
    } 
} 
+0

ли max_gram 15 в основном говорят, что если существует частичный поиск более чем 15 не будет работать? Также есть простой способ установить это как анализатор для всех полей? – Nived

+0

Насколько медленный поиск будет для большого большого количества большого документа? – Nived

+0

max_gram из 15 означает, что токены будут генерироваться до максимальной длины 15. так что поиск дольше 15 не будет работать. Вы можете настроить тот же анализатор на все поля, но не рекомендуется. Для больших текстов размер индекса значительно увеличится, что приведет к удару в результатах поиска. Но опять же это зависит от того, сколько у вас оборудования и сколько у вас документов. В конце концов, это также токены в инвертированном индексе. Обычно ngram/edgengram используется для небольших полей для автоматического заполнения запросов типа. –

Смежные вопросы