1

次の Solr クエリで検索を実行すると、必要なものが得られます。「PHP」または「プログラミング」という用語でタグ付けされた「コース」です。

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 の 1 つのタグです。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' を含める方法を学びたいです :) ありがとう!

4

2 に答える 2

2

どのエスケープ方式が最適かを判断するには、各用語の前にフィールド名を付けてみてください。たとえば、3 行目を取得して、これを試してください。

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

その理由は、各用語をどのフィールドに含める必要があるかを指定する必要があるためです。指定しないと、デフォルト フィールド ( text) で検索されます。エスケープの問題については、リテラルは二重引用符でエンコードする必要があり、文字どおりに表示する必要があるその他の特殊記号は URL エンコードする必要があります。

于 2012-05-27T19:00:05.373 に答える
0

フィールド名を繰り返すと効果があります。

&fq=facet_wmterm:Test1 OR PHP 

..すべての結果(=間違っている)を表示し、このようにフィールド名を繰り返します

&fq=facet_wmterm:Test1 OR facet_wmterm:PHP

..Test1またはPHPのみのコースを提供しています(=正解です!)。そのアンサリをありがとう。

ただし、特殊文字を誤ってエスケープしていたため、これでも.NET C#コースを適切にクエリすることはできませんでした。Solrでは、引用符を使用して、引用符の間にあるものを文字通り検索できますが、私が使用していた一重引用符の代わりに二重引用符を使用する必要があります。http://wiki.apache.org/solr/SolrQuerySyntax

これは私のために働いた:

&fq=(facet_wmterm:Test1 OR "C# .NET")
于 2012-05-27T19:43:24.680 に答える