2016-01-11 2 views
1

filterInputs.profileId = "d12";Упругий поисковый запрос, создающий строку, совпадающий регистр нечувствителен

var results = client 
            .Search<StockBaseEntity>(s => s 
            .Type("item") 
            .Take(1000) 
            .Filter(f => f 
            .Bool(bb => bb 
            .Must(ms => 
            { 
             return 
              !ms.Term("profileId", filterInputs.profileId) 
            }))) 
            .Sort(so => so.OnField("sortScore").Ascending()) 
           ); 

"profileId" может быть в небольших или капитальных или смешанных. Я хочу вернуть результат независимо от дела.

Как я могу это сделать?

В настоящее время его обработка d123 отличается от D123. OR da отличается от DA, отличается от dA. (Все они должны быть одинаковыми).

Как я могу это сделать?

+0

Можете ли вы поделиться картографированием индекса? По '' profileId 'может быть в малом или столичном или смешанном' вы имеете в виду - значение поля 'profileId' может быть в малом или столичном или смешанном? – Rob

+0

да. значение «profileId» в документе может быть небольшим/капиталом. Также передаваемый входной фильтрInputs.profileId также может быть в любом случае. – maverick

ответ

0

Если вы используете анализатор standard для поля profileId (что, я думаю, вы в противном случае не задавали бы этот вопрос), то значения хранятся в нижнем регистре в индексе Elasticsearch. Вам необходимо ввести значение filterInputs.profileId и передать его в фильтр Term().

var results = client.Search<StockBaseEntity>(s => s 
    .Type("item") 
    .Take(1000) 
    .Filter(f => f 
     .Bool(bb => bb 
      .Must(ms => 
      { 
       return !ms.Term("profileId", filterInputs.profileId.ToLowerInvariant()); 
      }))) 
    .Sort(so => so.OnField("sortScore").Ascending())); 
+0

Я не знаю об анализаторе, так как я новичок в поиске эластичности, но у документов есть «profileId» в столицах. – maverick

+0

Даже если вы попытались проиндексировать поле заглавными буквами, в инвертированном индексе значение будет меньше и сохранено. Поэтому, если вы также ищете более низкое значение, вы должны увидеть результаты. Мой запрос работает на вас? – bittusarkar

+0

@ bittusarkar стоит упомянуть поля 'not_analyzed' и где нужно анализировать и анализировать поля,' multi_fields' тоже –

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