Işe neden Solr bu tür alışkanlık?

3 Cevap java

Ben adı "mod_date" bir tarih-alan türü, sıralamak gerekir.

Bu tarayıcı adres-bar bu gibi çalışır:

   http://localhost:8983/solr/select/?&q=bmw&sort=mod_date+desc

Ama Solr için bir URL gönderen bir phpSolr istemci kullanıyorum ve gönderilen url şudur:

 fq=+category%3A%22Bilar%22+%2B+car_action%3AS%C3%A4ljes&version=1.2&wt=json&json.nl=map&q=%2A%3A%2A&start=0&rows=5&sort=mod_date+desc

 // This wont work and is echoed after this in php:

 $queryString = http_build_query($params, null, $this->_queryStringDelimiter);
 $queryString = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $queryString);

Bu alışkanlık iş, ben neden bilmiyorum!

Her şey gayet iyi çalışıyor, tamam alanları döndürülür. Ama sıralama çalışmıyor.

Herhangi bir fikir?

Teşekkürler

BTW: alan "mod_date" gibi bir şey içerir:

    2010-03-04T19:37:22.5Z

EDIT:

Önce service.php denilen başka bir php dosyası olan bir SolrPhpClient bu göndermek için PHP kullanabilirsiniz:

    require_once('../SolrPhpClient/Apache/Solr/Service.php');
    $solr = new Apache_Solr_Service('localhost', 8983, '/solr/');
    $results = $solr->search($querystring, $p, $limit, $solr_params);

$ Solr_params Solr-parametreleri (q, FQ, vb) içeren bir dizidir.

Şimdi, service.php in:

            $params['version'] = self::SOLR_VERSION;

    // common parameters in this interface
    $params['wt'] = self::SOLR_WRITER;
    $params['json.nl'] = $this->_namedListTreatment;

    $params['q'] = $query;
    $params['sort'] = 'mod_date desc'; // HERE IS THE SORT I HAVE PROBLEM WITH

    $params['start'] = $offset;
    $params['rows'] = $limit;
            $queryString = http_build_query($params, null, $this->_queryStringDelimiter);
            $queryString = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $queryString);

     if ($method == self::METHOD_GET)
    {
 return $this->_sendRawGet($this->_searchUrl . $this->_queryDelimiter . $queryString);
    }
else if ($method == self::METHOD_POST)
    {
    return $this->_sendRawPost($this->_searchUrl, $queryString, FALSE, 'application/x-www-form-urlencoded');
    }

The $results contain the results from Solr... So this is the way I need to get to work (via php).

Ben PHPclient yoluyla, elle adres çubuğuna yapıştırın değil (çünkü bu Q üstüne) aşağıda bu kod thats vardır, ancak çalışır. Ama şu sadece hata ayıklama için, ben PHPclient aracılığıyla işe almak gerekir:

  http://localhost:8983/solr/select/?&q=bmw&sort=mod_date+des // Not via phpclient, but works

UPDATE (2010-03-08): I have tried Donovans codes (the urls) and they work fine. Now, I have noticed that it is one of the parameters causing the 'SORT' not to work. This parameter is the "wt" parameter. If we take the url from top of this Q, (fq=+category%3A%22Bilar%22+%2B+car_action%3AS%C3%A4ljes&version=1.2&wt=json&json.nl=map&q=%2A%3A%2A&start=0&rows=5&sort=mod_date+desc), and just simply remove the "wt" parameter, then the sort works. BUT the results appear differently, thus making my php code not able to recognize the results I believe. Donovan would know this I think. I am guessing in order for the PHPClient to work, the results must be in a specific structure, which gets messed up as soon as I remove the wt parameter.

Donovan, lütfen bana yardım ...

Here is some background what I use your SolrPhpClient for: I have a classifieds website, which uses MySql. But for the searching I am using Solr to search some indexed fields. Then Solr returns an array of ID:numbers (for all matches of the search criteria). Then I use those ID:numbers to find everything in a MySql db and fetch all other information (example is not searchable information).

Yani basitleştirilmiş: - Arama> Solr kimliği bir dizi tüm eşleşmeleri döndürür: nrs -> No: Solr gelen sayılar MySQL db kimlik numaraları aynıdır, bu yüzden sadece basit bir maç agains kimliği ile her kayıt yapabilirsiniz Solr sonuçları diziden kimliği eşleşen.

Ben hayır, alaka veya diğer fantezi şeyler artırılması, Gemologists kullanmayın. Ben sadece sıralama son sınıflandırılmış koymak tarafından ve kullanıcılara seçeneği vermek için de sıralama ucuz fiyata. Hiçbir şey daha.

Sonra (benim dilinde "Bilar" bu durumda örneğin "araba") kullanıcılar tarafından seçilen kategori bağlı Solr farklı alanlarda sorguları yapmak için "fq" parametresini kullanabilirsiniz.

I am really stuck with this problem here... Teşekkürler for all help

3 Cevap

Yığın taşması açıklamalarda belirttiği gibi, tarayıcı sorgu php tabanlı istemci sorgu farklıdır - denklemden bu kaldırmak için bu düzeltilmiş ile test etmelisiniz. Eğer php kod konum tarayıcı tabanlı sorgu olarak aynı sonuçları elde etmek için böyle bir şey baktım:

$solr = new Apache_Solr_Client(...);

$searchOptions = array(
  'sort' => 'mod_date desc'
);

$results = $solr->search("bmw", 0, 10, $searchOptions);

Bunun yerine, ben daha fazla gibi görünüyor düşünün:

$searchOptions = array(
    'fq' => 'category:"Bilar" + car_action:Sälje',
    'sort' => 'mod_date desc'
)

$solr->search("\*:*", 0, 10, $searchOptions);

Ne görmeyi beklediğiniz php istemci sonuçları tarayıcı tabanlı sonucu olarak aynı olacak ve ben bunu ters bir şekilde yapsam aynı olacağını hayal olduğunu - php istemcisi mevcut parametreleri almak ve doğru bunları uygulamalı tarayıcı tabanlı sorgu.

Şimdi sorun üzerine, düzgün kriteri belgeleri görmüyorum.

Ben php istemci tabanlı kod eşdeğer olan, bu sorguyu denemek istiyorum:

http://localhost:8983/solr/select/?&q=%2A%3A%2A&fq=+category%3A%22Bilar%22+%2B+car_action%3AS%C3%A4ljes&sort=mod_date+desc

ana sorgu içine filtre sorgusu taşır bu sorgu, karşı:

http://localhost:8983/solr/select/?&q=+category%3A%22Bilar%22+%2B+car_action%3AS%C3%A4ljes&sort=mod_date+desc

bir fark olup olmadığını görmek. Müşteri ile bir sorun olmaz, ama Solr hizmet kendisi - varsa, o zaman önbelleğe süzülmüş sorguları sonuçları Solr tarafından kullanılan ve sıralanır nasıl bir hata olabilir.

Bu bir anser için daha yakın olur umarım.

Sıralama parametrelerini kaydetmek için oturumun değerlerini kullanın.

Durumda birisi hızlı cevap Solr-php-istemci üzerinden sıralamak için çalışıyor:

$searchOptions = array('sort' => 'field_date desc');

Genellikle URL üzerinde vereceğini + işaretini hendek. Ben onu kodlayan ve yerde tüm koyarak, onu anlamaya de biraz zaman aldı ...