Очень странное поведение с cfhttp и cfhttpparam

С новым годом,

Новый год застал меня в борьбе с проблемой кодирования. Я использую ColdFusion, а для движка CFML — «openBD». У меня есть CFC, который обрабатывает запросы поисковой системы, которую я использую (поисковая система SOLR). Я «кормлю» этот CFC некоторыми аргументами. CFC работает как надо. Но когда я пытаюсь передать определенный аргумент (#apofasi_taxonomy #), CFC ничего не возвращает (если я передам указанный выше аргумент непосредственно в поисковую систему, не используя CFC, я увижу результаты возврата/поиска)

Часть CFC:

  <cffunction name="searchP" access="remote" returnFormat="json">         
      <cfargument name="q" type="string" default="" required="yes"> 
      <cfargument name="apofasi_taxonomy" type="string" default="apofasi_taxonomy:(*)" required="yes">
      <cfargument name="apofasi_tmima" type="string" default="apofasi_tmima:(*)" required="yes">
      <cfargument name="apofasi_date" type="string" default="apofasi_date:(*)" required="yes">  
      <cfargument name="apofasi_number" type="string" default="apofasi_number:(*)" required="yes"> 
      <!---<cfargument name="apofasi_taxonomy" type="string" default="*">
      <cfargument name="apofasi_tmima" type="string" default="*">
      <cfargument name="apofasi_date" type="string" default="*">  
      <cfargument name="apofasi_number" type="string" default="*">--->

      <cfset theUrl = 'http://localhost/solr/areios_pagos/select/?'>

      <cfhttp method="get" url="#theUrl#" port="8090" result="rs" username="abcd" password="********">
        <cfhttpparam type="url" name="q" value="#q#">
        <cfhttpparam type="url" name="fq" value="#apofasi_taxonomy#+#apofasi_tmima#+#apofasi_date#+#apofasi_number#">
        <!---<cfhttpparam type="url" name="fq" value="apofasi_taxonomy:(3068 || ΠΟΙΝΙΚΕΣ) AND apofasi_date:(2010)">--->        
        <!---<cfhttpparam type="url" name="fq" value="apofasi_taxonomy:(3068) AND apofasi_date:(*) AND apofasi_number:(*)">--->
        <cfhttpparam type="url" name="rows" value="120">
        <cfhttpparam type="url" name="wt" value="json">
        <cfhttpparam type="url" name="sort" value="score desc">
        <cfhttpparam type="url" name="hl" value="true">
        <cfhttpparam type="url" name="hl.fl" value="content,title">
        <cfhttpparam type="url" name="fl" value="grid_title,title,url,ida,model,search_tag,solr_id">
        <cfhttpparam type="url" name="f.content.hl.alternateField" value="content">
        <cfhttpparam type="url" name="hl.maxAlternateFieldLength" value="800">
      </cfhttp>

Обратите внимание, что поисковая система использует такие URL, как:

http://localhost/solr/areios_pagos/select/?q=blahblah&fq=apofasi_taxonomy:(3068)+ apofasi_tmima:(Α || Ζ)+ apofasi_date:(2007 || 2012)+apofasi_number:(666)

Что я проверил до сих пор: Аргументы, которые я передаю в CFC, на 100% в порядке (из html), я дважды проверил, может ли поисковая система использовать приведенный выше синтаксис URL. Но я заметил очень странное поведение. Когда я полностью исключаю аргументы #apofasi_taxonomy# или #apofasi_tmima# из URL-адреса, CFC работает (он возвращает результаты). Аргумент #apofasi_taxonomy# принимает следующие значения: apofasi_taxonomy:(ΠΟΙΝΙΚΕΣ), apofasi_taxonomy:(ΠΟΛΙΤΙΚΕΣ), apofasi_taxonomy:(3068) или apofasi_taxonomy:(ΠΟΙΝΙΚΕΣ || 3068), apofasi_taxonomy:(ΠΟΙΝΙΚΕΣ || ΠΟΛΙΤΙΚΕΣ) и т. д.

Я заметил еще одну вещь: аргумент #apofasi_taxonomy# работает со значениями ниже: apofasi_taxonomy(ΠΟΙΝΙΚΕΣ), apofasi_taxonomy:(ΠΟΛΙΤΙΚΕΣ)и apofasi_taxonomy:(ΠΟΛΙΤΙΚΕΣ || ΠΟΙΝΙΚΕΣ), но не работает для apofasi_taxonomy:(3068), apofasi_taxonomy:(ΠΟΛΙΤΙΚΕΣ || 3068), apofasi_taxonomy:(ΠΟΛΙΤΙΚΕΣ || 3068) или apofasi_taxonomy:(ΠΟΛΙΤΙΚΕΣ || ΠΟΛΙΤΙΚΕΣ || 3068). Разве это не странно?

Значения, которые принимает аргумент #apofasi_tmima#: Α || Α1 || Α2 || Β || Β2 || Γ || Δ || Ε || ΣΤ || Ζ || ΟΛΟΜΕΛΕΙΑ например. apofasi_tmima(Β || Β2 || ΟΛΟΜΕΛΕΙΑ).

Имейте в виду, что приведенные выше значения указаны на греческом языке.

Есть ли кто-нибудь, кто может помочь?

С уважением, Том

изменить: запрошенный XML, указанный в комментариях, перемещен в вопрос

<fieldType name="text_areios_pagos" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true"/>
        <filter class="solr.LowerCaseFilterFactory"/> 
        <filter class="solr.EnglishPossessiveFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_el.txt" enablePositionIncrements="true"/>
        <filter class="solr.GreekLowerCaseFilterFactory"/>
        <filter class="solr.GreekStemFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" enablePositionIncrements="true"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_el.txt" enablePositionIncrements="true"/>
        <filter class="solr.GreekLowerCaseFilterFactory"/>
        <filter class="solr.GreekStemFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EnglishPossessiveFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
        <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
</fieldType>

person Community    schedule 03.01.2013    source источник
comment
это работает, если вы ищете без специальных символов?   -  person Matt Busche    schedule 03.01.2013
comment
Ничего общего с вашей проблемой, но я заметил, что ваши теги cfargument имеют обязательные = да и значения по умолчанию. Разве одно не противоречит цели другого?   -  person Dan Bracuk    schedule 03.01.2013
comment
@Dan Bracuk Я удалил стандартную и требуемую директиву, но это не работает!   -  person    schedule 03.01.2013
comment
@Matt Busche Какие специальные символы вы имеете в виду?   -  person    schedule 03.01.2013
comment
@anarchos78 неанглийские символы, такие как ΠΟΛΙΤΙΚΕΣ   -  person Matt Busche    schedule 03.01.2013
comment
@Matt Busche С ΠΟΛΙΤΙΚΕΣ или ΠΟΙΝΙΚΕΣ работает! Не работает с 3068   -  person    schedule 03.01.2013
comment
Как определяется поле apofasi_taxonomy в Solr schema.xml? Добавьте к своему вопросу запись <fields> для этого поля, а также соответствующую запись <fieldType>, как определено свойством type. Возможно, определение поля неправильно индексирует/запрашивает числа.   -  person Paige Cook    schedule 03.01.2013
comment
@Paige Cook Определение <field>: <field name="apofasi_taxonomy" type="text_areios_pagos" indexed="true" stored="true"/>. <fieldType>:<fieldType name="text_areios_pagos" class="solr.TextField" positionIncrementGap="100">   -  person    schedule 03.01.2013
comment
Спасибо, но это не все определение fieldType, можете ли вы включить все между записями <fieldType ...> и </fieldType>.   -  person Paige Cook    schedule 03.01.2013
comment
@Paige Cook Вы увидите три (3) части. Пожалуйста, киньте его в XML Beautifier   -  person    schedule 03.01.2013
comment
@Paige Cook ‹fieldType name=text_areios_pagos class=solr.TextField positionIncrementGap=100›‹analyzer type=index›‹tokenizer class=solr.StandardTokenizerFactory/›‹filter class=solr.StopFilterFactory ignoreCase=true words=lang/stopwords_en.txt enablePositionIncrements =true/›‹filter class=solr.LowerCaseFilterFactory/›‹filter class=solr.EnglishPossessiveFilterFactory/›‹filter class=solr.StopFilterFactory ignoreCase=true words=lang/stopwords_el.txt enablePositionIncrements=true/›‹filter class=solr. Греческий фильтр нижнего регистраFactory/›   -  person    schedule 03.01.2013
comment
@Paige Cook‹filter class=solr.GreekStemFilterFactory/›‹filter class=solr.KeywordMarkerFilterFactory protected=protwords.txt/›‹filter class=solr.PorterStemFilterFactory/›‹/analyzer›‹analyzer type=query›‹tokenizer class=solr .StandardTokenizerFactory/›‹filter class=solr.SynonymFilterFactory synonyms=synonyms.txt ignoreCase=true expand=true/›‹filter class=solr.StopFilterFactory ignoreCase=true words=lang/stopwords_en.txt enablePositionIncrements=true/›‹filter class= solr.StopFilterFactory ignoreCase=true words=lang/stopwords_el.txt enablePositionIncrements=true/›   -  person    schedule 03.01.2013
comment
@Paige Cook‹filter class=solr.GreekLowerCaseFilterFactory/›‹filter class=solr.GreekStemFilterFactory/›‹filter class=solr.LowerCaseFilterFactory/›‹filter class=solr.EnglishPossessiveFilterFactory/›‹filter class=solr.KeywordMarkerFilterFactory protected=protwords. txt/› ‹filter class=solr.PorterStemFilterFactory/›‹/analyzer›‹/fieldType›   -  person    schedule 03.01.2013
comment
@Paige Cook Это не имеет ничего общего с solr. Как я уже сказал, если я запрошу solr, например: http://localhost/solr/areios_pagos/select/?q=blahblah&fq=apofasi_taxonomy:(3068)+apofasi_tmima:(Α || Ζ)+apofasi_date:(2007 || 2012)+apofasi_number:(666) он работает, проблема на стороне ColdFusion.   -  person    schedule 03.01.2013
comment
Спасибо @Travis за добавление xml к вопросу, его намного легче читать :) Извините, из вашего вопроса не было ясно, что сторона Solr работает правильно.   -  person Paige Cook    schedule 03.01.2013
comment
@anarchos78 anarchos78, вы пытались вывести #apofasi_taxonomy#+#apofasi_tmima#+#apofasi_date#+#apofasi_number#, чтобы убедиться, что это именно то, что вы ожидаете? то есть это = apofasi_taxonomy:(3068‌​)+apofasi_tmima:(Α || Ζ)+apofasi_date:(2007 || 2012)+apofasi_number:(666) как вы его искали в solr?   -  person Travis    schedule 03.01.2013
comment
@Travis Я это не проверял. Есть ли способ увидеть, что представляет собой объект cfhttp? Я не знаю, как это сделать.   -  person    schedule 03.01.2013
comment
попробуйте <cfoutput>#apofasi_taxonomy#+#apofasi_tmima#+#apofasi_date#+#apofasi_number#</cfoutput><cfabort> непосредственно перед тегом cfhttp, если это не сработает, используйте <cfreturn #apofasi_taxonomy#+#apofasi_tmima#+#apofasi_date#+#apofasi_number#> непосредственно перед тегом cfhttp   -  person Travis    schedule 04.01.2013
comment
извините <cfreturn "#apofasi_taxonomy#+#apofasi_tmima#+#apofasi_date#+#apofasi_number#">   -  person Travis    schedule 04.01.2013
comment
@Travis выводит хорошо. Я попытаюсь перепроверить сторону solr. Спасибо   -  person    schedule 04.01.2013


Ответы (1)


Возможно, вам придется добавить атрибут charset в ваш тег cfhttp.

    <cfhttp ... charset="ISO-8859-7" ...
person Tim Garver    schedule 21.04.2014