Differential D18533 Diff 44512 src/applications/search/engineextension/PhabricatorFerretFulltextEngineExtension.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/engineextension/PhabricatorFerretFulltextEngineExtension.php
| Show All 23 Lines | public function indexFulltextObject( | ||||
| $engine = $object->newFerretEngine(); | $engine = $object->newFerretEngine(); | ||||
| $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 = $engine->newStemmer(); | ||||
| $ngram_engine = id(new PhabricatorNgramEngine()); | |||||
| // Copy all of the "title" and "body" fields to create new "core" fields. | // Copy all of the "title" and "body" fields to create new "core" fields. | ||||
| // This allows users to search "in title or body" with the "core:" prefix. | // This allows users to search "in title or body" with the "core:" prefix. | ||||
| $document_fields = $document->getFieldData(); | $document_fields = $document->getFieldData(); | ||||
| $virtual_fields = array(); | $virtual_fields = array(); | ||||
| foreach ($document_fields as $field) { | foreach ($document_fields as $field) { | ||||
| $virtual_fields[] = $field; | $virtual_fields[] = $field; | ||||
| Show All 22 Lines | public function indexFulltextObject( | ||||
| ); | ); | ||||
| foreach ($virtual_fields as $field) { | foreach ($virtual_fields as $field) { | ||||
| list($key, $raw_corpus) = $field; | list($key, $raw_corpus) = $field; | ||||
| if (!strlen($raw_corpus)) { | if (!strlen($raw_corpus)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| $term_corpus = $ngram_engine->newTermsCorpus($raw_corpus); | $term_corpus = $engine->newTermsCorpus($raw_corpus); | ||||
| $normal_corpus = $stemmer->stemCorpus($raw_corpus); | $normal_corpus = $stemmer->stemCorpus($raw_corpus); | ||||
| $normal_coprus = $ngram_engine->newTermsCorpus($normal_corpus); | $normal_coprus = $engine->newTermsCorpus($normal_corpus); | ||||
| if (!isset($ferret_corpus_map[$key])) { | if (!isset($ferret_corpus_map[$key])) { | ||||
| $ferret_corpus_map[$key] = $empty_template; | $ferret_corpus_map[$key] = $empty_template; | ||||
| } | } | ||||
| $ferret_corpus_map[$key]['raw'][] = $raw_corpus; | $ferret_corpus_map[$key]['raw'][] = $raw_corpus; | ||||
| $ferret_corpus_map[$key]['term'][] = $term_corpus; | $ferret_corpus_map[$key]['term'][] = $term_corpus; | ||||
| $ferret_corpus_map[$key]['normal'][] = $normal_corpus; | $ferret_corpus_map[$key]['normal'][] = $normal_corpus; | ||||
| Show All 27 Lines | foreach ($ferret_corpus_map as $key => $fields) { | ||||
| $ferret_fields[] = $engine->newFieldObject() | $ferret_fields[] = $engine->newFieldObject() | ||||
| ->setFieldKey($key) | ->setFieldKey($key) | ||||
| ->setRawCorpus($raw_corpus) | ->setRawCorpus($raw_corpus) | ||||
| ->setTermCorpus($term_corpus) | ->setTermCorpus($term_corpus) | ||||
| ->setNormalCorpus($normal_corpus); | ->setNormalCorpus($normal_corpus); | ||||
| } | } | ||||
| $ngrams_source = implode(' ', $ngrams_source); | $ngrams_source = implode(' ', $ngrams_source); | ||||
| $ngrams = $ngram_engine->getNgramsFromString($ngrams_source, 'index'); | $ngrams = $engine->getNgramsFromString($ngrams_source, 'index'); | ||||
| $ferret_document->openTransaction(); | $ferret_document->openTransaction(); | ||||
| try { | try { | ||||
| $this->deleteOldDocument($engine, $object, $document); | $this->deleteOldDocument($engine, $object, $document); | ||||
| $ferret_document->save(); | $ferret_document->save(); | ||||
| ▲ Show 20 Lines • Show All 70 Lines • Show Last 20 Lines | |||||