2015-02-05 3 views
1

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

N = 0 & НКА = Весь & NTX = режим + matchall & Ntt = Румтеки & NRS = коллекция()/запись [(CustomerName = "% 22RUMTEK% 22 + ЛТД")] & Нет = 0 & Ns = , Endeca.stratify (collection()/record [not% 20 (invoiceDate)]) || invoiceDate | 1 ||, Endeca.stratify (collection()/record [not% 20 (invoiceNumber)]) || invoiceNumber | 1

В приведенном выше запросе результаты выбираются на основе значения «rumtek», и мы применяем фильтр, задавая значение как «ООО« РУМТЕК ».». После кодирования значение фильтра преобразуется в «% 22RUMTEK% 22 + LTD.». Этот запрос не получает результата.

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

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

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

Спасибо заранее.

+0

Опишите ваши проиндексированные данные (в частности, поле customerName) немного больше. Почему вы хотите отфильтровать результаты с именем клиента «RUMTEK» LTD », а не просто« RUMTEK LTD »(т. Е. Без дополнительных кавычек)? У вас есть записи с клиентом Имя «RUMTEK« LTD »? Получаете ли вы результаты, когда вы используете customerName = «RUMTEK + LTD» в параметре Nrs (т. Е. Без котировок с URL-кодированием)? У вас есть двойная кавычка, отмеченная знаком поиска в студии разработчиков? – chairbender

+0

@chairbender, у нас есть данные с дополнительными двойными кавычками, предоставленными нашим клиентом. Мы не получаем результаты с «RUMTEK + LTD», так как у нас нет таких данных, и запрос предназначен для точного поиска.Мы фильтруем каждый столбец вместе с текстовым полем для фильтрации. Фильтрация в текстовом поле, мы преобразуем текст в поиск по диким картам, например, «* RUMTEK * + * LTD *», используя endeca: совпадения в нашем запросе. Это дает нам правильный результат. – zenith

+0

Чтобы исправить вышеуказанный комментарий, мы преобразуем текст в * RUMTEK * + * LTD *. Нужно ли добавлять escape-символ в endeca для чтения специальных символов (% и «). Спасибо за ваш интерес @chairbender, любая помощь приветствуется. – zenith

ответ

0

Во-первых, вам нужно убедиться, что ваш параметр Nrs r полностью и правильно кодируется 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. Большое спасибо за вашу помощь !!!! – zenith