2012-05-27 3 views
1

다음 Solr 쿼리를 사용하여 검색을 수행 할 때 'PHP'또는 '프로그래밍'이라는 태그가 붙은 "코스"를 얻을 수 있습니다.Solr 패싯 검색에서 용어를 올바르게 인코딩하는 방법

q=[* TO *]&facet=on&facet.field=facet_contenttype&fq=facet_contenttype:mediaitems_course&facet.field=facet_wmterm&fq=(facet_wmterm:PHP OR Programming) 

이제 'C# .NET'으로 태그 된 코스도 포함하고 싶습니다. 전체 문자열 'C# .NET'은 사용중인 CMS에서 하나의 태그입니다. facet_wmterm 필터 쿼리에 대해 다음과 같은 가능성을 시도했습니다.

&fq=(facet_wmterm:PHP OR Programming OR C# .NET) // no quotes 
&fq=(facet_wmterm:PHP OR Programming OR 'C# .NET') // quotes 
&fq=(facet_wmterm:PHP OR Programming OR 'C#+.NET') // quotes and replaced space for + sign 
&fq=(facet_wmterm:PHP OR Programming OR C#%2b.NET) // no quotes, encoded + sign 
&fq=(facet_wmterm:PHP OR Programming OR 'C#%2b.NET') // quotes, encoded + sign 
&fq=(facet_wmterm:PHP OR Programming OR 'C%23+.NET') // quotes, encoded # sign 
&fq=(facet_wmterm:PHP OR Programming OR C%23+.NET) // no quotes, encoded # sign 
&fq=(facet_wmterm:PHP OR Programming OR 'C%23%2B.NET') // quotes, encoded # and + signs 
&fq=(facet_wmterm:PHP OR Programming OR C%23%2B.NET) // no quotes, encoded # and + signs 
and a lot more options.... 

이상하게은, 위의 모든 옵션에 상관없이, 모든 과정을 반환하지 그들이 무엇을 태그하고 'C# .NET'비트를 제거하면 나에게 초기를 제공하기 때문에 내가, 내가 캐싱을보고 있지 않다 확신, 올바른 'PHP 또는 프로그래밍'결과.

약간 화를 내고 있기 때문에 'C# .NET'을 내 패싯 쿼리에 포함시키는 방법을 배우는 것을 좋아합니다. 감사합니다!

+0

어떤 데이터 유형의 schema.xml에서처럼 않습니다. 대답은 StandardTokenizerFactory, LowerCaseFilterFactory 등을 사용하는지 여부에 따라 달라질 수 있습니다. – Evan

답변

0

필드 이름 반복은 효과가 있습니다.

&fq=facet_wmterm:Test1 OR PHP 

&fq=facet_wmterm:Test1 OR facet_wmterm:PHP 

같은 필드 이름을 (= 잘못된) 나에게 모든 결과를주고 반복 ..is 나에게 Test1 파일 또는 PHP 단지와 교육 과정을 제공 ..is (올바른 =!). 그 안사리에 감사드립니다.

그래도 특수 문자를 잘못 이스케이프했기 때문에 여전히 .NET C# 과정을 올바르게 쿼리하는 데 도움이되지 못했습니다. Solr에서는 따옴표를 사용하여 따옴표 사이에있는 내용을 문자 그대로 검색 할 수 있지만 사용중인 작은 따옴표 대신 큰 따옴표 을 사용해야합니다.

http://wiki.apache.org/solr/SolrQuerySyntax은 나를 위해 일한 :

&fq=(facet_wmterm:Test1 OR "C# .NET") 
+0

예 한 가지 문제 만 지적 했으므로 알아낼 수있는 이스케이프 문제를 남겼습니다. 그것은 단지 규칙의 예입니다. 일반적으로 문자를 검색하고 URL 인코딩 특수 문자를 큰 따옴표로 묶습니다. 관리 섹션을 사용하여 인코딩 방법을 정확하게 파악할 수 있습니다. – Ansari

1

어떤 이스케이프 체계가 가장 잘 작동하는지 파악하려면 각 용어 앞에 필드 이름을 붙이십시오. 예를 들어, 세 번째 줄을 복용 그래서,이 시도 :

&fq=(facet_wmterm:PHP OR facet_wmterm:Programming OR facet_wmterm:'C#+.NET') // quotes and replaced space for + sign 

이유는 각각의 용어가 될 필요가있는 필드로 지정해야한다는 것입니다, 그렇지 않으면 기본 필드 (text)에서 검색합니다. 이스케이프 문제의 경우 리터럴을 큰 따옴표로 인코딩해야하며 문자 그대로 표시해야하는 다른 특수 기호는 URL 인코딩되어야합니다.