14

私はMagentoEnterpriseでSolrを使用しています。ORデフォルトの検索演算子をからに変更して、デフォルトで検索ANDをより具体的にしようとしています。

私が最初に試したのは、目的の効果が得られなかったものを変更defaultOperatorすることでした(キーワードではなくフィールド間で使用を開始しました)。schema.xmlAND

<solrQueryParser defaultOperator="AND"/>

次に、LocalParamsrequestHandlerについて読んで、それをのいくつかのセクションに追加してみましたsolrconfig.xml(どこに行くべきかを推測しているだけで、役立つドキュメントは見つかりません)。

<requestHandler name="magento_en" class="solr.SearchHandler">
    <lst name="defaults">
        <str name="q.op">AND</str>

app/core/core/Enterprise/Searchまた、クエリにハードコードされたコード( )を調べ{!q.op=AND}ましたが、それでも機能させることができませんでした。

単純な構成変更だと思いますが、誰かが私を正しい方向に向けることができますか?

編集:明確にするために、「赤いジャケット」(引用符なし)を検索すると、「赤いANDジャケット」の結果が返されます。私は実際には赤いジャケットであり、赤い靴や青いジャケットではない製品にのみ興味があります。「redANDjacket」を手動で検索すると、私が求めている結果が返されます。

現在、検索では次のクエリが実行されます。

INFO: [] webapp=/solr path=/select params={start=0&q=articles_title:red+jacket*+articles_summary:red+jacket*+articles_text:red+jacket*+cms_title:red+jacket*+cms_content:red+jacket*&json.nl=map&wt=json&fq=store_id:1+store_id:0&version=1.2&rows=4} hits=7 status=0 QTime=1 
09/01/2013 10:46:21 AM org.apache.solr.core.SolrCore execute
INFO: [] webapp=/solr path=/select params={spellcheck=true&sort=attr_sort_score_en+desc&spellcheck.extendedResults=true&json.nl=map&wt=json&spellcheck.collate=true&version=1.2&rows=1&fl=id&start=0&q=(Red+jacket)&spellcheck.dictionary=magento_spell_en&q.op=AND&spellcheck.count=2&qt=magento_en&fq=(visibility:3+OR+visibility:4)+AND+store_id:1} hits=645 status=0 QTime=5 
09/01/2013 10:46:21 AM org.apache.solr.core.SolrCore execute
INFO: [] webapp=/solr path=/select params={facet=on&sort=score+desc&json.nl=map&wt=json&version=1.2&rows=24&fl=id&start=0&facet.query=category_ids:8&facet.query=category_ids:46&facet.query=category_ids:88&facet.query=category_ids:126&facet.query=category_ids:168&facet.query=category_ids:180&facet.query=category_ids:207&facet.query=category_ids:224&facet.query=category_ids:242&facet.query=category_ids:276&q=(Red+jacket)&q.op=AND&facet.field=attr_nav_multi_colourway&qt=magento_en&fq=(visibility:3+OR+visibility:4)+AND+store_id:1} hits=645 status=0 QTime=5 
09/01/2013 10:46:22 AM org.apache.solr.core.SolrCore execute
INFO: [] webapp=/solr path=/select params={facet=on&sort=attr_sort_score_en+desc&json.nl=map&wt=json&rows=100&version=1.2&start=0&facet.query=category_ids:8&facet.query=category_ids:46&facet.query=category_ids:88&facet.query=category_ids:126&facet.query=category_ids:168&facet.query=category_ids:180&facet.query=category_ids:207&facet.query=category_ids:224&facet.query=category_ids:242&facet.query=category_ids:276&q=(Red+jacket)&q.op=AND&facet.field=attr_nav_multi_colourway&qt=magento_en&fq=(visibility:3+OR+visibility:4)+AND+store_id:1} hits=645 status=0 QTime=6 
09/01/2013 10:46:22 AM org.apache.solr.core.SolrCore execute
INFO: [] webapp=/solr path=/select params={facet=on&sort=attr_sort_score_en+desc&json.nl=map&wt=json&rows=100&version=1.2&start=0&facet.query=category_ids:8&facet.query=category_ids:46&facet.query=category_ids:88&facet.query=category_ids:126&facet.query=category_ids:168&facet.query=category_ids:180&facet.query=category_ids:207&facet.query=category_ids:224&facet.query=category_ids:242&facet.query=category_ids:276&q=(Red+jacket)&q.op=AND&facet.field=attr_nav_multi_colourway&qt=magento_en&fq=(visibility:3+OR+visibility:4)+AND+store_id:1} hits=645 status=0 QTime=3 
4

6 に答える 6

13

dismaxパーサープラグインのMaciliasのリンクのおかげで、solrconfig.xmlの設定を使用してこれを実現する方法を見つけました。このファイルには、さまざまな言語のrequestHandlerノードがあります。当店は英語なので、英語のものを変更しました。デフォルトでは、xmlは次のようになります。

<requestHandler name="magento_en" class="solr.SearchHandler">
    <lst name="defaults">
        <str name="qf">fulltext_1_en^1.0 fulltext_2_en^2.0 fulltext_3_en^3.0 fulltext_4_en^4.0 fulltext_5_en^5.0</str>
        <str name="pf">fulltext_1_en^1.0 fulltext_2_en^2.0 fulltext_3_en^3.0 fulltext_4_en^4.0 fulltext_5_en^5.0</str>
        <int name="ps">1</int>
        <str name="mm">1</str>
        <str name="defType">dismax</str>
        <str name="echoParams">explicit</str>
        <str name="spellcheck.onlyMorePopular">false</str>
        <str name="spellcheck.extendedResults">false</str>
        <str name="spellcheck.count">1</str>
    </lst>
    <arr name="last-components">
        <str>spellcheck</str>
    </arr>
</requestHandler>

ここで重要なパラメータは「mm」です。これは、Minimum'Should'Matchを表します。dismaxパーサーは、デフォルトの演算子の代わりにこれを使用して、複数の検索語を処理する方法を決定します。値1は、クエリの1つの用語のみが一致する必要があることを意味します(ORと同じ動作)。100%の値は、すべての用語が一致する必要があることを意味します(ANDと同じ動作)。より複雑な値も使用できます。詳細については、上記のリンクをたどってください。solrconfig.xmlファイルの設定を変更した後、それらが有効になる前にSolrサーバーを再起動する必要があります。

このビデオは、Magento Solrの優れたリソースでもあり ます。http ://www.youtube.com/watch?v = 07uIJSXdqpU 彼らは、24分前後の最小一致について話します。

于 2013-09-02T21:05:28.107 に答える
4

結局、演算子をORではなくANDに変更するq.opを使用することになりました。例えば:

 ?q=text:small cars&q.op=AND
于 2015-10-23T00:53:52.033 に答える
2

次の(テストされていない)を試してください。

q={!q.op=AND df=articles_title}red jacket&fq=articles_summary:(red AND jacket)&fq=articles_text:(red AND jacket)

残りのフィールドは、パラメーターを使用して同様の方法で使用されfqます。

上記は、言及されたすべてのフィールドに用語redとjacketが含まれているすべてのレコードを返します。ただし、少なくとも1つのフィールドに赤とジャケットが含まれているレコードを返す必要がある場合は、コピーフィールドを使用してこれらすべてのフィールドを1つのフィールドにマップしてから、コピーフィールドタイプを検索することをお勧めします。

于 2013-01-09T01:01:47.663 に答える
0
My question is not so much about the syntax but where to configure this so it applies to all searches.

あなたの質問に答えるには、solrconfig.xmlではなくschema.xmlでsolrQueryParserのデフォルト演算子を指定する必要があると確信しています。あなたが言ったように、それはとして与えられます、

< solrQueryParser defaultOperator="AND"/>

期待どおりの結果が得られなかった理由は、次の理由による可能性があります。

検索URLが次のような場合、

q=articles_summary:red+jacket

次に、「red」はフィールド「articles_summary」に対して検索されますが、「jacket」デフォルトの検索フィールド(たとえば「text」)に対して検索されます。これは、私が正しい場合、すべての検索可能なフィールドのコピーを含むコピーフィールドになります。したがって、「articles_summary」の「red」と「text」の「jacket」に一致するものが得られます。

期待どおりの結果を得るには、デフォルトの操作をANDに設定した後、次のURLのようなものを使用することをお勧めします。

q=articles_summary:red+articles_summary:jacket

検索するフィールドが複数ある場合は、次のようにする必要があります。

q=articles_summary:red+articles_summary:jacket+articles_title:red+articles_title:jacket
于 2013-01-09T04:15:54.153 に答える
0

私自身の質問に答えるために、Enterprise_Search_Model_Adapter_HttpStreamモデルをオーバーライドANDして検索クエリにsを挿入することになりました。prepareSearchConditions()私はからメソッドを追加しましたEnterprise_Search_Model_Adapter_Solr_Abstract

<?php

class Foo_Search_Model_Adapter_HttpStream extends Enterprise_Search_Model_Adapter_HttpStream
{
    protected function prepareSearchConditions($query)
    {
        $query = str_replace(' ', ' AND ', str_replace(' AND ', ' ', $query));

        return parent::prepareSearchConditions($query);
    }
}

明らかに他の演算子とはうまく機能しませんが、私の場合は十分に機能します™(少なくとも今のところ)。私はまだより良い解決策を見つけることを望んでいます。

于 2013-01-11T05:21:12.423 に答える
0

solrでは、dismax(またはedismax)パーサープラグインを使用する必要があります。ここで、最小値を100%に一致させるように設定できます。あなたはここでより多くの情報を見つけることができます

于 2013-06-18T14:01:35.253 に答える