Поиск без учета регистра в индексе проверки (Lucene)

#lucene #umbraco #examine

#lucene #umbraco #исследовать

Вопрос:

Возможно ли выполнить поиск без учета регистра с использованием Examine Index и Lucene без изменения сохраненных данных? Я сохраняю статьи с идентификатором, заголовком, текстом и датой. Я не хочу индексировать свои данные в нижнем регистре, поскольку я хочу прочитать свои данные из индекса и отобразить их как есть. Таким образом, я могу пропустить шаг перехода к базе данных для получения данных. Сохранение одних и тех же данных дважды, один раз в том виде, в каком они есть, и один раз в нижнем регистре, не кажется правильным способом сделать это.

Есть предложения, как подойти к этому?

ExamineIndex.config

  <IndexSet SetName="MySearchIndexSet" IndexPath="~/App_Data/TEMP/ExamineIndexes/MySearch/" >
<IndexUserFields>
  <add Name="Id" />
  <add Name="Title" />
  <add Name="Text" />
  <add Name="Date" />
</IndexUserFields>
  

ExamineSettings.config

    <add name="MySearchIndexer" type="Examine.LuceneEngine.Providers.SimpleDataIndexer, Examine"
      dataService="X.Service.MyIndexerService, X"
      indexTypes="CustomData"
      runAsync="false"
      enableDefaultEventHandler="true"
      analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net"/>

     <add name="MySearchSearcher" type="UmbracoExamine.UmbracoExamineSearcher, UmbracoExamine"
             analyzer="Lucene.Net.Analysis.WhitespaceAnalyzer, Lucene.Net" enableLeadingWildcard="true" />
    
  

Ответ №1:

В lucene анализаторах не изменяет ваши данные. Они определяют только способ индексирования данных. Таким образом, вы можете индексировать свои данные так, как хотите (не вводите данные в нижний регистр в своем коде), и извлекать значения такими, какие они есть.

В качестве дополнительного примечания в lucene у вас могут быть поля с разными атрибутами (индексированные / неиндексированные, сохраненные / не сохраненные). Таким образом, вы можете добавить одно и то же поле дважды: одно только для извлечения (сохраненное и не проиндексированное) и одно для поиска (проиндексированное в нижнем регистре, но не сохраненное). Проверьте, examine поддерживает ли эти типы полей.