Differential D18497 Diff 44443 src/applications/search/engineextension/PhabricatorFerretFulltextEngineExtension.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/engineextension/PhabricatorFerretFulltextEngineExtension.php
| Show All 25 Lines | public function indexFulltextObject( | ||||
| $ferret_document = $engine->newDocumentObject() | $ferret_document = $engine->newDocumentObject() | ||||
| ->setObjectPHID($phid) | ->setObjectPHID($phid) | ||||
| ->setIsClosed(0) | ->setIsClosed(0) | ||||
| ->setEpochCreated(0) | ->setEpochCreated(0) | ||||
| ->setEpochModified(0); | ->setEpochModified(0); | ||||
| $stemmer = new PhutilSearchStemmer(); | $stemmer = new PhutilSearchStemmer(); | ||||
| $ferret_fields = array(); | $key_all = PhabricatorSearchDocumentFieldType::FIELD_ALL; | ||||
| $ngrams_source = array(); | |||||
| $empty_template = array( | |||||
| 'raw' => array(), | |||||
| 'normal' => array(), | |||||
| ); | |||||
| $ferret_corpus_map = array( | |||||
| $key_all => $empty_template, | |||||
| ); | |||||
| foreach ($document->getFieldData() as $field) { | foreach ($document->getFieldData() as $field) { | ||||
| list($key, $raw_corpus) = $field; | list($key, $raw_corpus) = $field; | ||||
| if (!strlen($raw_corpus)) { | if (!strlen($raw_corpus)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| $normal_corpus = $stemmer->stemCorpus($raw_corpus); | $normal_corpus = $stemmer->stemCorpus($raw_corpus); | ||||
| if (!isset($ferret_corpus_map[$key])) { | |||||
| $ferret_corpus_map[$key] = $empty_template; | |||||
| } | |||||
| $ferret_corpus_map[$key]['raw'][] = $raw_corpus; | |||||
| $ferret_corpus_map[$key]['normal'][] = $normal_corpus; | |||||
| $ferret_corpus_map[$key_all]['raw'][] = $raw_corpus; | |||||
| $ferret_corpus_map[$key_all]['normal'][] = $normal_corpus; | |||||
| } | |||||
| $ferret_fields = array(); | |||||
| foreach ($ferret_corpus_map as $key => $fields) { | |||||
| $raw_corpus = $fields['raw']; | |||||
| $raw_corpus = implode("\n", $raw_corpus); | |||||
| $normal_corpus = $fields['normal']; | |||||
| $normal_corpus = implode("\n", $normal_corpus); | |||||
| $ferret_fields[] = $engine->newFieldObject() | $ferret_fields[] = $engine->newFieldObject() | ||||
| ->setFieldKey($key) | ->setFieldKey($key) | ||||
| ->setRawCorpus($raw_corpus) | ->setRawCorpus($raw_corpus) | ||||
| ->setNormalCorpus($normal_corpus); | ->setNormalCorpus($normal_corpus); | ||||
| $ngrams_source[] = $raw_corpus; | |||||
| } | } | ||||
| $ngrams_source = implode(' ', $ngrams_source); | |||||
| $ngrams_source = $ferret_corpus_map[$key_all]['raw']; | |||||
| $ngrams_source = implode("\n", $ngrams_source); | |||||
| $ngrams = id(new PhabricatorNgramEngine()) | $ngrams = id(new PhabricatorNgramEngine()) | ||||
| ->getNgramsFromString($ngrams_source, 'index'); | ->getNgramsFromString($ngrams_source, 'index'); | ||||
| $ferret_document->openTransaction(); | $ferret_document->openTransaction(); | ||||
| try { | try { | ||||
| $this->deleteOldDocument($engine, $object, $document); | $this->deleteOldDocument($engine, $object, $document); | ||||
| ▲ Show 20 Lines • Show All 73 Lines • Show Last 20 Lines | |||||