Nrs в запросе Endeca не получает результаты, когда мы даем закодированное значение вместе с английским символом в URL

1

Мы используем Endeca для получения записей, так как они огромны. У нас есть dataTable на frontend, который отображает записи, полученные из Endeca через запрос Endeca. Теперь, когда мы фильтруем результаты на основе значений флажка во фронте, запрос добавляет атрибут Nrs и получает отфильтрованные результаты. Для любых китайских или русских или специальных символов мы кодируем их и создаем запрос. Пример:

N = 0 & НТК = Все & NTX = режим + matchall & Ntt = Румтеке & NRS = коллекция()/записи [(CustomerName = "% 22RUMTEK% 22 + LTD.")] & Нет = 0 & Ns =, Endeca.stratify (сбор()/запись [не %20 (InvoiceDate)]) || InvoiceDate | 1 ||, Endeca.stratify (сбор()/запись [не %20 (InvoiceNumber)]) || InvoiceNumber | 1

В приведенном выше запросе результаты извлекаются на основе значения "rumtek", и мы применяем фильтр, предоставляя значение как "RUMTEK" LTD. ". После кодирования значение фильтра преобразуется в "% 22RUMTEK% 22 + LTD.". Этот запрос не получает результата.

Результаты получаются, когда мы либо даем полный закодированный термин (например, для любого китайского слова, которое мы даем закодированное значение), либо любое английское слово. Результаты не извлекаются, когда предоставляются термины, содержащие двойные кавычки (") пример" ABC "LTD. Или AB & C (AB% 26C).

Еще одна проблема: - что, если бы мы сделали AB как Stop word (слова, которые не будут искать). Если мы ищем AB & C, то он будет искать результаты для AB & C, или мир сделает весь термин "стоп-словом".

Любое предложение будет оценено по достоинству.

Заранее спасибо.

  • 0
    Опишите ваши проиндексированные данные (в частности, поле customerName) немного подробнее. Почему вы хотите фильтровать результаты по имени клиента "" RUMTEK "LTD", а не только "RUMTEK LTD" (т.е. без дополнительных кавычек)? У вас есть записи с customerName "" RUMTEK "LTD"? Получаете ли вы результаты обратно, когда используете параметр customerName = "RUMTEK + LTD" в параметре Nrs (т.е. без кавычек в кодировке URL)? У вас есть двойная кавычка, помеченная как поисковый персонаж в студии разработчиков?
  • 0
    @chairbender, у нас есть данные с дополнительными двойными кавычками, предоставленными нашим клиентом. Мы не получаем результатов с "RUMTEK + LTD", так как у нас нет таких данных, и запрос для точного поиска. У нас есть фильтр для каждого столбца вместе с текстовым полем для фильтрации. Фильтруя в текстовом поле, мы преобразуем текст в поиск по шаблону, например, « RUMTEK * + * LTD », используя endeca: совпадения в нашем запросе. Это приносит нам правильный результат.
Показать ещё 3 комментария
Теги:
encoding
atg
endeca

1 ответ

0
Лучший ответ

Во-первых, вам нужно убедиться, что ваш параметр Nrs полностью и правильно закодирован URL. Во-вторых, вам нужно убедиться, что вы правильно избегаете двойных кавычек, потому что вы хотите сопоставить их.

Как вы сказали, ваши данные содержат некоторую запись, чье свойство customerName (без скобок) ["RUMTEK" LTD.]. Согласно Руководству по разработке MDEX, чтобы использовать двойные кавычки в качестве литерального значения, вам нужно избежать его, добавив его с символом двойной кавычки (как запутанно!). Итак, чтобы соответствовать этому, вам понадобится строка запроса (например, для чтения):

N=0&
Ntk=All&
Ntx=mode+matchall&
Ntt=rumtek&
Nrs=collection()/record[(customerName="""RUMTEK"" LTD.")]&
&No=0&
Ns=,Endeca.stratify(collection()/record[not%20(invoiceDate)])||invoiceDate|1||,Endeca.stratify(collection()/record[not%20(invoiceNumber)])||invoiceNumber|1

Теперь он еще не готов. Вам необходимо URL-кодировать значение параметра ENTIRE Nrs. Таким образом, это станет следующим:

N=0&
Ntk=All&
Ntx=mode+matchall&
Ntt=rumtek&
Nrs=collection%28%29%2Frecord%5B%28customerName%3D%22%22%22RUMTEK%22%22+LTD.%22%29%5D&
&No=0&
Ns=,Endeca.stratify(collection()/record[not%20(invoiceDate)])||invoiceDate|1||,Endeca.stratify(collection()/record[not%20(invoiceNumber)])||invoiceNumber|1

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

  • 0
    Я использовал двойные кавычки в качестве escape-символа для моего имени клиента, которое содержало двойные кавычки, и это сработало, когда я создал запрос и протестировал его в Endeca OrangeApp. Спасибо большое за вашу помощь !!!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню