Solr php müşteri arama yöntemi: word1 VEYA WORD2 aramak için kullanabilir?

2 Cevap php

i Solr php istemcisi kullanın.

ama arama yöntemini kullandığınızda:

$params = array('qf' => 'threads.title posts.body', 'defType' => dismax);

$results = $solr->search($query, $offset, $limit, $params);

i defType = dismax kullanmak zaman $ sorgu arar = bütün dize yerine Peter OR Jakob olarak 'Peter Jakob'. i $ params kullanmak Yüklü zaman çalışıyor. Ama asıl sorun i birden fazla alanlarda arama yapabilmek için dismax kullanmak zorunda olduğunu.

Nasıl Solr php client i Birden fazla alanda ve çoklu değerleri (OR) aramak zorunda olduğunu bilmek yapabilirsiniz?

İşte benim arama işleyicisi im kullanıyor:

<requestHandler name="standard" class="solr.SearchHandler" default="true">
    <!-- default values for query parameters -->
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <!--
       <int name="rows">10</int>
       <str name="fl">*</str>
       <str name="version">2.1</str>
        -->
     </lst>
  </requestHandler>

2 Cevap

Solr bunu sorguyu nasıl işlediğini görelim arayüze sahiptir. Belki orada bazı ipuçları elde edebilirsiniz? Bu ANALİZİ bağlantı (http://ora.ouls.ox.ac.uk:8080/solr/admin/analysis.jsp?highlight=on) Solr yönetici sayfasında öyle (http://ora.ouls.ox.ac.uk:8080/solr/admin/) bu Solr bu örneği çalışmak için görünmüyor rağmen. Kendi örneğinde bunu kontrol edin.

Maybe you should read this: http://wiki.apache.org/solr/SolrQuerySyntax and this: http://lucene.apache.org/java/2%5F4%5F0/queryparsersyntax.html

Schema.xml belgeliklerinde http://wiki.apache.org/solr/SchemaXml belirtiliyor olduğunu

The default operator used by Solr's query parser (SolrQueryParser) can be configured with

<solrQueryParser defaultOperator="AND|OR"/>

The default operator is "OR" if unspecified.

Bu yüzden özel bir şey yapmadan sizin için çalışması gerekir.

Eğer $ sorgu dönüştürmek istiyorsanız = Peter VEYA Jakob "Peter Jakob" sadece aşağıdakileri yapın:

$query = preg_replace('`(\\s)(\\w|"[^"]+")`', '\\1OR \\2', $query);

Eğer peşinde olduğunuz tam olarak ne değil, ama Bilginize sen dismax kullanmadan ve karmaşık sorguları yazmadan Birden fazla alanda arama yapabilirsiniz. Bir basit yaklaşım içine varsayılan arama alanlarını kopyalamak için copyField sistemi kullanmak ve daha sonra ayarladığınız varsayılan arama alanı olarak, örneğin "başlık" ve "açıklama" alanı ile bu örnek.

Bu gibi alanlar var:

   <field name="title" type="string" indexed="false" stored="true" />
   <field name="description" type="string" indexed="false" stored="true" />
   <field name="combined" type="string" indexed="true" stored="false" multiValued="true" />

Böyle copyfields ayarlayın:

 <copyField source="title" dest="combined" />
 <copyField source="description" dest="combined" />

Ve bu gibi varsayılan arama ayarlayabilirsiniz:

 <defaultSearchField>combined</defaultSearchField>

Bu başlık ve açıklama hem de içeren varsayılan tarafından "birleşik" alanına karşı çalışan aramalarda neden olacaktır.