0

ウェブサイトの検索エンジンとして xapian を使用しています。

最近、ś、ą、ć、ę などのポーランド語固有の文字を含む単語が検索されないことがわかりました。

これらの言語固有の文字のいずれかを含む単語を検索しようとすると、結果が返されません。xapian にエンコード設定はありますか?

これらは私の索引付けと検索機能です ($document には content、id、および route フィールドがあります)。

protected function _indexDocument($document, $indexer, $database)
{
    $doc = new XapianDocument();
    $content = Zend_Json::encode($document);
    $doc->set_data($content);

    $indexer->set_document($doc);
    $indexer->index_text($content);
    $term = (string) md5($document['id']);
    $doc->add_boolean_term($term);
    $database->replace_document($term, $doc);
    return true;
}


public function searchDocuments($phrase, $page = 0, $limit = 10)
{
    $page = (int) $page;
    $limit = (int) $limit;

    $database = new XapianDatabase($this->getDatabasePath());
    $enquire = new XapianEnquire($database);
    $qp = new XapianQueryParser();
    $stemmer = new XapianStem("english");
    $qp->set_stemmer($stemmer);
    $qp->set_database($database);
    $qp->set_stemming_strategy(XapianQueryParser::STEM_SOME);
    $query = $qp->parse_query($phrase);

    $enquire->set_query($query);
    $matches = $enquire->get_mset(($page-1) * $limit, $limit);

    $documentCount = $matches->get_matches_estimated();

    $i = $matches->begin();
    $documents = array();
    $rawDocuments = array();
    while (!$i->equals($matches->end())) {
        $n = $i->get_rank() + 1;
        $data = $i->get_document()->get_data();
        $documents[] = $this->_prepareDocument( Zend_Json::decode($data), $phrase );
        $rawDocuments[]= Zend_Json::decode($data);
        $i->next();
    }

    $pageCount = ceil($documentCount / $limit);
    if ($page > 0) {
        $prevPage = ($page - 1) * $limit;
    } else {
        $prevPage = 0;
    }
    if ($page < $pageCount) {
        $nextPage = ($page + 1) * $limit;
    } else {
        $nextPage = $pageCount;
    }
    $result = array('results' => $documents, 'results-raw' => $rawDocuments, 'paginator' => array(
            'page' => $page, 'limit' => $limit, 'pageCount' => $pageCount,
            'prevPage' => $prevPage, 'nextPage' => $nextPage,
            'documentCount' => $documentCount));
    return $result;

}
4

0 に答える 0