У меня есть несколько документов в Cloudant, у которых есть поле идентификатора строки типа. Идентификатор может быть простой строкой, например «aaa», «bbb» или номером, сохраненным в виде текста, например. «111», «222» и т. Д. Мне нужно иметь возможность полнотекстового поиска с использованием вышеуказанного поля, но я столкнулся с некоторыми проблемами.Cloudant - Поиск диапазона Lucene с использованием чисел, сохраненных как текст
Если предположить, что у меня есть два документа, имеющие ID = "ааа" и ID = "111", то поиск с запросом:
- ID: ааа
- ID: "ааа"
- ID : [ААА ZZZ]
- ID: [ "ААА" до "ZZZ"]
возвращает первый документ, как и ожидалось
- ID: 111
возвращает ничего, но
- ID: "111"
возвращается второй документ, так по крайней мере, есть способ, чтобы получить его.
К сожалению, при поиске диапазона:
- ID: [111 TO 999]
- ID: [ "111" В "999"]
Я не получаю никаких результатов, и Я понятия не имею, что делать, чтобы обойти эту проблему. Есть ли специальный синтаксис для такого случая?
UPDATE:
Индекс функции:
function(doc){
if(!doc.ID) return;
index("ID", doc.ID, { index:'not_analyzed_no_norms', store:true });
}
Изменение индекса проанализирован не помогает. Сам анализатор ключевое слово, но изменение на стандарт тоже не помогает.
UPDATE 2
Просто добавить еще некоторый контекст, потому что я думаю, что я пропустил один ключевой момент. Индексирование поля I будет выполняться с использованием диапазонов, и минимальные и максимальные значения могут быть предоставлены пользователем. Таким образом, возможно, что один из них будет содержать номер в виде строки, в то время как другой будет стандартным нечисловым текстом. Например, найдите весь документ, где ID> = "11" и ID < = "foo".
Предположим, что в базе данных содержатся документы с идентификаторами «1», «5», «альфа», «бета», «гамма», этот запрос должен возвращать «5», «альфа», «бета». Обратите внимание, что «5» должно быть действительно возвращено, потому что строка «5» больше строки «11».
Есть ли шанс, что вы можете поделиться своей функцией Map? – ukmadlz
Нет функции отображения, так как это полный текстовый индекс. Вопрос обновлен и содержит тело функции индекса. –
@ArekDygas вы можете прокомментировать, почему вы хотите сделать такой запрос диапазона для строк? Мне кажется, что если сортировка и запрос диапазона важны, вы будете использовать числовые значения. – Raj