Запросить список идентификаторов через запятую с помощью Examine и Lucene.Net? - PullRequest
3 голосов
/ 26 февраля 2011

Я использую Examine for Umbraco (который построен поверх Lucene.net) для поиска. Я совершенно уверен, что моя проблема связана с Lucene.

В одном из моих полей содержится список идентификаторов, разделенных запятыми. Как правильно запросить это поле?

Например. У меня есть поле со значениями "64,65". Я попытался использовать MultipleCharacterWildcard, которая возвращает результат, только если я запрашиваю идентификатор 64, но не идентификатор 65. SingleCharacterWildcard ничего не возвращает, а Fuzzy возвращает что-то, только если в поле есть только один идентификатор. Любые идеи о том, как сделать правильный поиск? Я думаю, что я ищу запрос "Contains".

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

Ответы [ 2 ]

4 голосов
/ 28 февраля 2011

Я бы определенно разделил список на отдельные поля. Вы можете иметь несколько значений для одного и того же имени поля в документе, что является довольно естественным способом представления набора значений:

venue_id: 12345
treatment_id_set: 1234
treatment_id_set: 2345

С такими документами я могу просто запросить «treatment_id_set: 1234», чтобы найти все места, поддерживающие эту обработку. Конечно, порядок процедур потерян. Если вам необходимо восстановить его, сохраните значение, разделенное запятыми, при индексации отдельных элементов:

# stored, indexed
venue_id: 12345
# stored, not indexed
treatment_id_list: 1234,2345
# not stored, indexed
treatment_id_set: 1234
treatment_id_set: 2345
0 голосов
/ 10 апреля 2018

Чтобы добавить дубликаты полей с одинаковым значением ключа в Lucene с помощью Umbraco Examine, вам нужно подключиться к событию «Написание документа».

_index.DocumentWriting += _index_DocumentWriting;

Затем будет открыт базовый документ Lucene..

Поля могут быть добавлены следующим образом:

foreach (var item in someList)
                {
                    e.Document.Add(new Field("fieldName", item, Field.Store.YES, Field.Index.NOT_ANALYZED));
                }
...