42 $searchData = $this->getSearchString($searchWordsArray);
47 $GLOBALS[
'TT']->push(
'execFinalQuery');
48 $resource = $this->execFinalQuery_fulltext($searchData, $freeIndexUid);
60 public function getSearchString($searchWordArray) {
64 $searchBoolean = FALSE;
65 $fulltextIndex =
'index_fulltext.fulltextdata';
67 $naturalSearchString =
'';
69 $booleanSearchString =
'';
71 $searchType = (string)$this->pObj->getSearchType();
74 foreach ($searchWordArray as $searchWordData) {
76 $searchWord = $searchWordData[
'sword'];
78 if (strstr($searchWord,
' ')) {
79 $searchType = self::SENTENCE;
81 switch ($searchType) {
82 case self::ANY_PART_OF_THE_WORD:
84 case self::LAST_PART_OF_THE_WORD:
86 case self::FIRST_PART_OF_THE_WORD:
90 $searchBoolean = TRUE;
92 case self::SOUNDS_LIKE:
96 $searchWord = $indexerObj->metaphone($searchWord, $indexerObj->storeMetaphoneInfoAsWords);
98 $fulltextIndex =
'index_fulltext.metaphonedata';
101 $searchBoolean = TRUE;
103 $searchWord = trim(str_replace(
'"',
' ', $searchWord));
107 switch ($searchWordData[
'oper']) {
109 $booleanSearchString .=
' -' . $searchWord . $wildcard;
110 $searchBoolean = TRUE;
113 $booleanSearchString .=
' ' . $searchWord . $wildcard;
114 $searchBoolean = TRUE;
117 $booleanSearchString .=
' +' . $searchWord . $wildcard;
118 $naturalSearchString .=
' ' . $searchWord;
122 if ($searchType == self::SENTENCE) {
123 $searchString =
'"' . trim($naturalSearchString) .
'"';
124 } elseif ($searchBoolean) {
125 $searchString = trim($booleanSearchString);
127 $searchString = trim($naturalSearchString);
130 'searchBoolean' => $searchBoolean,
131 'searchString' => $searchString,
132 'fulltextIndex' => $fulltextIndex
143 protected function execFinalQuery_fulltext($searchData, $freeIndexUid = -1) {
147 $freeIndexUidClause = $this->pObj->freeIndexUidWhere($freeIndexUid);
149 $searchRootPageIdList = $this->pObj->getSearchRootPageIdList();
150 if ($hookObj = &$this->pObj->hookRequest(
'execFinalQuery_idList')) {
151 $pageWhere = $hookObj->execFinalQuery_idList(
'');
152 } elseif ($this->pObj->getJoinPagesForQuery()) {
156 $pageWhere =
'pages.uid = ISEC.page_id 157 ' .
$GLOBALS[
'TSFE']->cObj->enableFields(
'pages') .
' 158 AND pages.no_search=0 159 AND pages.doktype<200 161 } elseif ($searchRootPageIdList[0] >= 0) {
166 foreach ($searchRootPageIdList as $rootId) {
169 $idList[] = $cObj->getTreeList( -1 * $rootId, 9999);
171 $pageWhere =
' ISEC.page_id IN (' . implode(
',', $idList) .
')';
177 if ($searchData[
'searchBoolean']) {
178 $searchBoolean =
' IN BOOLEAN MODE';
180 $resource =
$GLOBALS[
'TYPO3_DB']->exec_SELECTquery(
181 'index_fulltext.*, ISEC.*, IP.*',
182 'index_fulltext, index_section ISEC, index_phash IP' . $pageJoin,
183 'MATCH (' . $searchData[
'fulltextIndex'] .
') 184 AGAINST (' .
$GLOBALS[
'TYPO3_DB']->fullQuoteStr($searchData[
'searchString'],
'index_fulltext') . $searchBoolean .
') ' .
185 $this->pObj->mediaTypeWhere() .
' ' . $this->pObj->languageWhere() . $freeIndexUidClause .
' 186 AND index_fulltext.phash = IP.phash 187 AND ISEC.phash = IP.phash 189 'IP.phash,ISEC.phash,ISEC.phash_t3,ISEC.rl0,ISEC.rl1,ISEC.rl2,ISEC.page_id,ISEC.uniqid,IP.phash_grouping,IP.data_filename ,IP.data_page_id ,IP.data_page_reg1,IP.data_page_type,IP.data_page_mp,IP.gr_list,IP.item_type,IP.item_title,IP.item_description,IP.item_mtime,IP.tstamp,IP.item_size,IP.contentHash,IP.crdate,IP.parsetime,IP.sys_language_uid,IP.item_crdate,IP.cHashParams,IP.externalUrl,IP.recordUid,IP.freeIndexUid,IP.freeIndexSetId' const FIRST_PART_OF_THE_WORD
getResultRows_SQLpointer($searchWordsArray, $freeIndexUid=-1)
static makeInstance($className)
const ANY_PART_OF_THE_WORD
const LAST_PART_OF_THE_WORD
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]