From 721d635761609cb6fd0d52add63ef4fd90447d63 Mon Sep 17 00:00:00 2001
From: shodan
Date: Fri, 6 Feb 2015 11:32:26 +0000
Subject: [PATCH 01/73] branched out 2.2.x
From 5eadb89649e2604c142cbd887808135ce7b120c8 Mon Sep 17 00:00:00 2001
From: tomat
Date: Mon, 9 Feb 2015 08:44:45 +0000
Subject: [PATCH 02/73] fixed #2171 template index options setup added
regression to test 223
---
src/searchd.cpp | 19 ++++++++++++++++---
test/test_223/model.bin | 2 +-
test/test_223/test.xml | 1 +
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/src/searchd.cpp b/src/searchd.cpp
index e3b68439..b1b80784 100644
--- a/src/searchd.cpp
+++ b/src/searchd.cpp
@@ -20279,9 +20279,6 @@ void PreCreateTemplateIndex ( ServedDesc_t & tServed, const CSphConfigSection &
tServed.m_pIndex->m_bExpandKeywords = tServed.m_bExpand;
tServed.m_pIndex->m_iExpansionLimit = g_iExpansionLimit;
tServed.m_bEnabled = false;
-
- CSphString sError;
- sphFixupIndexSettings ( tServed.m_pIndex, hIndex, sError, true );
}
void PreCreatePlainIndex ( ServedDesc_t & tServed, const char * sName )
@@ -20507,6 +20504,22 @@ ESphAddIndex AddIndex ( const char * szIndexName, const CSphConfigSection & hInd
// try to create index
PreCreateTemplateIndex ( tIdx, hIndex );
tIdx.m_bEnabled = true;
+
+ CSphIndexSettings s;
+ CSphString sError;
+ if ( !sphConfIndex ( hIndex, s, sError ) )
+ {
+ sphWarning ( "failed to configure index %s: %s", szIndexName, sError.cstr() );
+ return ADD_ERROR;
+ }
+ tIdx.m_pIndex->Setup(s);
+
+ if ( !sphFixupIndexSettings ( tIdx.m_pIndex, hIndex, sError ) )
+ {
+ sphWarning ( "index '%s': %s - NOT SERVING", szIndexName, sError.cstr() );
+ return ADD_ERROR;
+ }
+
CSphIndexStatus tStatus;
tIdx.m_pIndex->GetStatus ( &tStatus );
tIdx.m_iMass = CalculateMass ( tStatus );
diff --git a/test/test_223/model.bin b/test/test_223/model.bin
index 7e26ecb3..bf9045bc 100644
--- a/test/test_223/model.bin
+++ b/test/test_223/model.bin
@@ -1 +1 @@
-a:1:{i:0;a:126:{i:0;a:3:{s:8:"sphinxql";s:53:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:1;a:3:{s:8:"sphinxql";s:48:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:2;a:3:{s:8:"sphinxql";s:54:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:3;a:3:{s:8:"sphinxql";s:49:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:4;a:3:{s:8:"sphinxql";s:55:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:5;a:3:{s:8:"sphinxql";s:59:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:6;a:3:{s:8:"sphinxql";s:55:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:7;a:3:{s:8:"sphinxql";s:54:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:8;a:3:{s:8:"sphinxql";s:54:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:9;a:3:{s:8:"sphinxql";s:55:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:10;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:11;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:12;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:13;a:3:{s:8:"sphinxql";s:57:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:14;a:3:{s:8:"sphinxql";s:61:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:15;a:3:{s:8:"sphinxql";s:57:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:16;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:17;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:18;a:3:{s:8:"sphinxql";s:55:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:19;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:20;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:21;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:22;a:3:{s:8:"sphinxql";s:57:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:23;a:3:{s:8:"sphinxql";s:61:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:24;a:3:{s:8:"sphinxql";s:57:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:25;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:26;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:27;a:3:{s:8:"sphinxql";s:48:"CALL KEYWORDS ( 'english text', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:28;a:3:{s:8:"sphinxql";s:43:"CALL KEYWORDS ( 'english text', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:29;a:3:{s:8:"sphinxql";s:49:"CALL KEYWORDS ( 'english text', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:30;a:3:{s:8:"sphinxql";s:44:"CALL KEYWORDS ( 'english text', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:31;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( 'english text', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:32;a:3:{s:8:"sphinxql";s:54:"CALL KEYWORDS ( 'english text', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:33;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( 'english text', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:34;a:3:{s:8:"sphinxql";s:49:"CALL KEYWORDS ( 'english text', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:35;a:3:{s:8:"sphinxql";s:49:"CALL KEYWORDS ( 'english text', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:36;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( '"english text"', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:37;a:3:{s:8:"sphinxql";s:45:"CALL KEYWORDS ( '"english text"', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:38;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '"english text"', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:39;a:3:{s:8:"sphinxql";s:46:"CALL KEYWORDS ( '"english text"', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:40;a:3:{s:8:"sphinxql";s:52:"CALL KEYWORDS ( '"english text"', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:41;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '"english text"', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:42;a:3:{s:8:"sphinxql";s:52:"CALL KEYWORDS ( '"english text"', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:43;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '"english text"', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:44;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '"english text"', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:45;a:3:{s:8:"sphinxql";s:101:"CALL SNIPPETS('check vs checking fast path', 'tmpl_generic', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:46;a:3:{s:8:"sphinxql";s:96:"CALL SNIPPETS('check vs checking fast path', 'tmpl_wf', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:47;a:3:{s:8:"sphinxql";s:102:"CALL SNIPPETS('check vs checking fast path', 'tmpl_wf_exact', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:48;a:3:{s:8:"sphinxql";s:97:"CALL SNIPPETS('check vs checking fast path', 'tmpl_crc', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:49;a:3:{s:8:"sphinxql";s:103:"CALL SNIPPETS('check vs checking fast path', 'tmpl_crc_exact', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:50;a:3:{s:8:"sphinxql";s:107:"CALL SNIPPETS('check vs checking fast path', 'tmpl_lemmatize_all', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:51;a:3:{s:8:"sphinxql";s:103:"CALL SNIPPETS('check vs checking fast path', 'tmpl_lemmatize', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:52;a:3:{s:8:"sphinxql";s:102:"CALL SNIPPETS('check vs checking fast path', 'tmpl_prefixed', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:53;a:3:{s:8:"sphinxql";s:102:"CALL SNIPPETS('check vs checking fast path', 'tmpl_expanded', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:54;a:3:{s:8:"sphinxql";s:125:"CALL SNIPPETS('check vs checking regular path', 'tmpl_generic', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:55;a:3:{s:8:"sphinxql";s:120:"CALL SNIPPETS('check vs checking regular path', 'tmpl_wf', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:56;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS('check vs checking regular path', 'tmpl_wf_exact', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:57;a:3:{s:8:"sphinxql";s:121:"CALL SNIPPETS('check vs checking regular path', 'tmpl_crc', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:58;a:3:{s:8:"sphinxql";s:127:"CALL SNIPPETS('check vs checking regular path', 'tmpl_crc_exact', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:59;a:3:{s:8:"sphinxql";s:131:"CALL SNIPPETS('check vs checking regular path', 'tmpl_lemmatize_all', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:60;a:3:{s:8:"sphinxql";s:127:"CALL SNIPPETS('check vs checking regular path', 'tmpl_lemmatize', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:61;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS('check vs checking regular path', 'tmpl_prefixed', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:62;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS('check vs checking regular path', 'tmpl_expanded', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:63;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:64;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:65;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:66;a:3:{s:8:"sphinxql";s:113:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:67;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:68;a:3:{s:8:"sphinxql";s:123:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:69;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:70;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:71;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:72;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:73;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:74;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:75;a:3:{s:8:"sphinxql";s:113:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:76;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:77;a:3:{s:8:"sphinxql";s:123:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:78;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:79;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:80;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:81;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:82;a:3:{s:8:"sphinxql";s:113:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:83;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:84;a:3:{s:8:"sphinxql";s:114:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:85;a:3:{s:8:"sphinxql";s:120:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:86;a:3:{s:8:"sphinxql";s:124:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:87;a:3:{s:8:"sphinxql";s:120:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:88;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:89;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:90;a:3:{s:8:"sphinxql";s:136:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:91;a:3:{s:8:"sphinxql";s:131:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:92;a:3:{s:8:"sphinxql";s:137:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:93;a:3:{s:8:"sphinxql";s:132:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:94;a:3:{s:8:"sphinxql";s:138:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:95;a:3:{s:8:"sphinxql";s:142:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:96;a:3:{s:8:"sphinxql";s:138:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:97;a:3:{s:8:"sphinxql";s:137:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:98;a:3:{s:8:"sphinxql";s:137:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:99;a:3:{s:8:"sphinxql";s:127:"CALL SNIPPETS('time is dying out like everething', 'tmpl_generic', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:100;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS('time is dying out like everething', 'tmpl_wf', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:101;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS('time is dying out like everething', 'tmpl_wf_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:102;a:3:{s:8:"sphinxql";s:123:"CALL SNIPPETS('time is dying out like everething', 'tmpl_crc', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:103;a:3:{s:8:"sphinxql";s:129:"CALL SNIPPETS('time is dying out like everething', 'tmpl_crc_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:104;a:3:{s:8:"sphinxql";s:133:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize_all', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:105;a:3:{s:8:"sphinxql";s:129:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:106;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS('time is dying out like everething', 'tmpl_prefixed', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:107;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS('time is dying out like everething', 'tmpl_expanded', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:108;a:3:{s:8:"sphinxql";s:120:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:109;a:3:{s:8:"sphinxql";s:115:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:110;a:3:{s:8:"sphinxql";s:121:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:111;a:3:{s:8:"sphinxql";s:116:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:112;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:113;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', 'nothing', 40 AS limit, 1 as allow_empty )";s:5:"error";s:55:"failed to setup AOT with query_mode=0, use query_mode=1";s:5:"errno";i:1064;}i:114;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:115;a:3:{s:8:"sphinxql";s:121:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:116;a:3:{s:8:"sphinxql";s:121:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:117;a:3:{s:8:"sphinxql";s:110:"CALL SNIPPETS('time is dying out like everething', 'tmpl_generic', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:118;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS('time is dying out like everething', 'tmpl_wf', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:119;a:3:{s:8:"sphinxql";s:111:"CALL SNIPPETS('time is dying out like everething', 'tmpl_wf_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:120;a:3:{s:8:"sphinxql";s:106:"CALL SNIPPETS('time is dying out like everething', 'tmpl_crc', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:121;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS('time is dying out like everething', 'tmpl_crc_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:122;a:3:{s:8:"sphinxql";s:116:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize_all', 'nothing', 40 AS limit, 1 as allow_empty )";s:5:"error";s:55:"failed to setup AOT with query_mode=0, use query_mode=1";s:5:"errno";i:1064;}i:123;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:124;a:3:{s:8:"sphinxql";s:111:"CALL SNIPPETS('time is dying out like everething', 'tmpl_prefixed', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:125;a:3:{s:8:"sphinxql";s:111:"CALL SNIPPETS('time is dying out like everething', 'tmpl_expanded', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}}}
\ No newline at end of file
+a:1:{i:0;a:140:{i:0;a:3:{s:8:"sphinxql";s:53:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:1;a:3:{s:8:"sphinxql";s:48:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:2;a:3:{s:8:"sphinxql";s:54:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:3;a:3:{s:8:"sphinxql";s:49:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:4;a:3:{s:8:"sphinxql";s:55:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:5;a:3:{s:8:"sphinxql";s:59:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:6;a:3:{s:8:"sphinxql";s:55:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:7;a:3:{s:8:"sphinxql";s:54:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:8;a:3:{s:8:"sphinxql";s:54:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:9;a:3:{s:8:"sphinxql";s:61:"CALL KEYWORDS ( 'Фичин баг', 'tmpl_lemmatize_exact' )";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:11:"=фичин";}i:2;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}i:3;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:7:"=баг";}}}i:10;a:3:{s:8:"sphinxql";s:55:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:11;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:12;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:13;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:14;a:3:{s:8:"sphinxql";s:57:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:15;a:3:{s:8:"sphinxql";s:61:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:16;a:3:{s:8:"sphinxql";s:57:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:17;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:18;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:19;a:3:{s:8:"sphinxql";s:63:"CALL KEYWORDS ( '^Фичин баг$', 'tmpl_lemmatize_exact' )";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:11:"=фичин";}i:2;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}i:3;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:7:"=баг";}}}i:20;a:3:{s:8:"sphinxql";s:55:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:21;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:22;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:23;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:24;a:3:{s:8:"sphinxql";s:57:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:25;a:3:{s:8:"sphinxql";s:61:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:26;a:3:{s:8:"sphinxql";s:57:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:27;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:28;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:10:"фичин";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}}}i:29;a:3:{s:8:"sphinxql";s:63:"CALL KEYWORDS ( '"Фичин баг"', 'tmpl_lemmatize_exact' )";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:12:"фичина";}i:1;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:10:"фичин";s:10:"normalized";s:11:"=фичин";}i:2;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:6:"баг";}i:3;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:6:"баг";s:10:"normalized";s:7:"=баг";}}}i:30;a:3:{s:8:"sphinxql";s:48:"CALL KEYWORDS ( 'english text', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:31;a:3:{s:8:"sphinxql";s:43:"CALL KEYWORDS ( 'english text', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:32;a:3:{s:8:"sphinxql";s:49:"CALL KEYWORDS ( 'english text', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:33;a:3:{s:8:"sphinxql";s:44:"CALL KEYWORDS ( 'english text', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:34;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( 'english text', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:35;a:3:{s:8:"sphinxql";s:54:"CALL KEYWORDS ( 'english text', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:36;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( 'english text', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:37;a:3:{s:8:"sphinxql";s:49:"CALL KEYWORDS ( 'english text', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:38;a:3:{s:8:"sphinxql";s:49:"CALL KEYWORDS ( 'english text', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:39;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( 'english text', 'tmpl_lemmatize_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:40;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ( '"english text"', 'tmpl_generic' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:41;a:3:{s:8:"sphinxql";s:45:"CALL KEYWORDS ( '"english text"', 'tmpl_wf' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:42;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '"english text"', 'tmpl_wf_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:43;a:3:{s:8:"sphinxql";s:46:"CALL KEYWORDS ( '"english text"', 'tmpl_crc' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:44;a:3:{s:8:"sphinxql";s:52:"CALL KEYWORDS ( '"english text"', 'tmpl_crc_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:45;a:3:{s:8:"sphinxql";s:56:"CALL KEYWORDS ( '"english text"', 'tmpl_lemmatize_all' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:46;a:3:{s:8:"sphinxql";s:52:"CALL KEYWORDS ( '"english text"', 'tmpl_lemmatize' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:47;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '"english text"', 'tmpl_prefixed' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:48;a:3:{s:8:"sphinxql";s:51:"CALL KEYWORDS ( '"english text"', 'tmpl_expanded' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:49;a:3:{s:8:"sphinxql";s:58:"CALL KEYWORDS ( '"english text"', 'tmpl_lemmatize_exact' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:4:"qpos";s:1:"1";s:9:"tokenized";s:7:"english";s:10:"normalized";s:7:"english";}i:1;a:3:{s:4:"qpos";s:1:"2";s:9:"tokenized";s:4:"text";s:10:"normalized";s:4:"text";}}}i:50;a:3:{s:8:"sphinxql";s:101:"CALL SNIPPETS('check vs checking fast path', 'tmpl_generic', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:51;a:3:{s:8:"sphinxql";s:96:"CALL SNIPPETS('check vs checking fast path', 'tmpl_wf', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:52;a:3:{s:8:"sphinxql";s:102:"CALL SNIPPETS('check vs checking fast path', 'tmpl_wf_exact', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:53;a:3:{s:8:"sphinxql";s:97:"CALL SNIPPETS('check vs checking fast path', 'tmpl_crc', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:54;a:3:{s:8:"sphinxql";s:103:"CALL SNIPPETS('check vs checking fast path', 'tmpl_crc_exact', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:55;a:3:{s:8:"sphinxql";s:107:"CALL SNIPPETS('check vs checking fast path', 'tmpl_lemmatize_all', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:56;a:3:{s:8:"sphinxql";s:103:"CALL SNIPPETS('check vs checking fast path', 'tmpl_lemmatize', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:57;a:3:{s:8:"sphinxql";s:102:"CALL SNIPPETS('check vs checking fast path', 'tmpl_prefixed', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:58;a:3:{s:8:"sphinxql";s:102:"CALL SNIPPETS('check vs checking fast path', 'tmpl_expanded', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:59;a:3:{s:8:"sphinxql";s:109:"CALL SNIPPETS('check vs checking fast path', 'tmpl_lemmatize_exact', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:60;a:3:{s:8:"sphinxql";s:125:"CALL SNIPPETS('check vs checking regular path', 'tmpl_generic', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:61;a:3:{s:8:"sphinxql";s:120:"CALL SNIPPETS('check vs checking regular path', 'tmpl_wf', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:62;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS('check vs checking regular path', 'tmpl_wf_exact', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:63;a:3:{s:8:"sphinxql";s:121:"CALL SNIPPETS('check vs checking regular path', 'tmpl_crc', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:64;a:3:{s:8:"sphinxql";s:127:"CALL SNIPPETS('check vs checking regular path', 'tmpl_crc_exact', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:65;a:3:{s:8:"sphinxql";s:131:"CALL SNIPPETS('check vs checking regular path', 'tmpl_lemmatize_all', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:66;a:3:{s:8:"sphinxql";s:127:"CALL SNIPPETS('check vs checking regular path', 'tmpl_lemmatize', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:67;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS('check vs checking regular path', 'tmpl_prefixed', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:68;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS('check vs checking regular path', 'tmpl_expanded', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:69;a:3:{s:8:"sphinxql";s:133:"CALL SNIPPETS('check vs checking regular path', 'tmpl_lemmatize_exact', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}i:70;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:71;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:72;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:73;a:3:{s:8:"sphinxql";s:113:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:74;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:75;a:3:{s:8:"sphinxql";s:123:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:76;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:77;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:78;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:79;a:3:{s:8:"sphinxql";s:125:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_exact', 'dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:80;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:81;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:82;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:83;a:3:{s:8:"sphinxql";s:113:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:84;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:85;a:3:{s:8:"sphinxql";s:123:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:86;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:87;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:88;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:89;a:3:{s:8:"sphinxql";s:125:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_exact', '*dying', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:90;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:91;a:3:{s:8:"sphinxql";s:113:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:92;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:93;a:3:{s:8:"sphinxql";s:114:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:94;a:3:{s:8:"sphinxql";s:120:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:95;a:3:{s:8:"sphinxql";s:124:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:96;a:3:{s:8:"sphinxql";s:120:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:97;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:98;a:3:{s:8:"sphinxql";s:119:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:99;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_exact', '*dying*', 1 AS query_mode, 20 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"time is dying out ... ";}}}i:100;a:3:{s:8:"sphinxql";s:136:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:101;a:3:{s:8:"sphinxql";s:131:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:102;a:3:{s:8:"sphinxql";s:137:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:103;a:3:{s:8:"sphinxql";s:132:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:104;a:3:{s:8:"sphinxql";s:138:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:105;a:3:{s:8:"sphinxql";s:142:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:106;a:3:{s:8:"sphinxql";s:138:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:107;a:3:{s:8:"sphinxql";s:137:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:108;a:3:{s:8:"sphinxql";s:137:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:109;a:3:{s:8:"sphinxql";s:144:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:110;a:3:{s:8:"sphinxql";s:127:"CALL SNIPPETS('time is dying out like everething', 'tmpl_generic', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:111;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS('time is dying out like everething', 'tmpl_wf', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:112;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS('time is dying out like everething', 'tmpl_wf_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:113;a:3:{s:8:"sphinxql";s:123:"CALL SNIPPETS('time is dying out like everething', 'tmpl_crc', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:114;a:3:{s:8:"sphinxql";s:129:"CALL SNIPPETS('time is dying out like everething', 'tmpl_crc_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:115;a:3:{s:8:"sphinxql";s:133:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize_all', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:116;a:3:{s:8:"sphinxql";s:129:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:117;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS('time is dying out like everething', 'tmpl_prefixed', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:118;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS('time is dying out like everething', 'tmpl_expanded', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:119;a:3:{s:8:"sphinxql";s:135:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize_exact', 'nothing', 1 AS query_mode, 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:120;a:3:{s:8:"sphinxql";s:120:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_generic', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:121;a:3:{s:8:"sphinxql";s:115:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:122;a:3:{s:8:"sphinxql";s:121:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_wf_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:123;a:3:{s:8:"sphinxql";s:116:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:124;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_crc_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:125;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_all', 'nothing', 40 AS limit, 1 as allow_empty )";s:5:"error";s:55:"failed to setup AOT with query_mode=0, use query_mode=1";s:5:"errno";i:1064;}i:126;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:127;a:3:{s:8:"sphinxql";s:121:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_prefixed', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:128;a:3:{s:8:"sphinxql";s:121:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_expanded', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:129;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS('time is dying out like everething else here', 'tmpl_lemmatize_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:5:"error";s:55:"failed to setup AOT with query_mode=0, use query_mode=1";s:5:"errno";i:1064;}i:130;a:3:{s:8:"sphinxql";s:110:"CALL SNIPPETS('time is dying out like everething', 'tmpl_generic', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:131;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS('time is dying out like everething', 'tmpl_wf', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:132;a:3:{s:8:"sphinxql";s:111:"CALL SNIPPETS('time is dying out like everething', 'tmpl_wf_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:133;a:3:{s:8:"sphinxql";s:106:"CALL SNIPPETS('time is dying out like everething', 'tmpl_crc', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:134;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS('time is dying out like everething', 'tmpl_crc_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:135;a:3:{s:8:"sphinxql";s:116:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize_all', 'nothing', 40 AS limit, 1 as allow_empty )";s:5:"error";s:55:"failed to setup AOT with query_mode=0, use query_mode=1";s:5:"errno";i:1064;}i:136;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:137;a:3:{s:8:"sphinxql";s:111:"CALL SNIPPETS('time is dying out like everething', 'tmpl_prefixed', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:138;a:3:{s:8:"sphinxql";s:111:"CALL SNIPPETS('time is dying out like everething', 'tmpl_expanded', 'nothing', 40 AS limit, 1 as allow_empty )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:0:"";}}}i:139;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('time is dying out like everething', 'tmpl_lemmatize_exact', 'nothing', 40 AS limit, 1 as allow_empty )";s:5:"error";s:55:"failed to setup AOT with query_mode=0, use query_mode=1";s:5:"errno";i:1064;}}}
\ No newline at end of file
diff --git a/test/test_223/test.xml b/test/test_223/test.xml
index e2ee3ea7..d53c706c 100644
--- a/test/test_223/test.xml
+++ b/test/test_223/test.xml
@@ -106,6 +106,7 @@ index tmpl_expanded
tmpl_lemmatizetmpl_prefixedtmpl_expanded
+tmpl_lemmatize_exact
From 465e37c53b5cd9668a111ad9402544acaf150c91 Mon Sep 17 00:00:00 2001
From: shodan
Date: Mon, 16 Feb 2015 19:45:12 +0000
Subject: [PATCH 03/73] fixed wlccs calculations
---
src/sphinxsearch.cpp | 6 ++++++
test/test_184/model.bin | 2 +-
test/test_184/test.xml | 3 +++
3 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/sphinxsearch.cpp b/src/sphinxsearch.cpp
index 888bc6d7..c3ed4240 100644
--- a/src/sphinxsearch.cpp
+++ b/src/sphinxsearch.cpp
@@ -8609,6 +8609,12 @@ DWORD RankerState_Expr_fn::Finalize ( const CS
// cleanup
ResetDocFactors();
+ memset ( m_dLCCS, 0 , sizeof(m_dLCCS) );
+ memset ( m_dWLCCS, 0, sizeof(m_dWLCCS) );
+ m_iQueryPosLCCS = 0;
+ m_iHitPosLCCS = 0;
+ m_iLenLCCS = 0;
+ m_fWeightLCCS = 0.0f;
// done
return uRes;
diff --git a/test/test_184/model.bin b/test/test_184/model.bin
index feee715d..e726705d 100644
--- a/test/test_184/model.bin
+++ b/test/test_184/model.bin
@@ -1 +1 @@
-a:1:{i:0;a:47:{i:0;a:3:{s:8:"sphinxql";s:72:"select id, gid, weight(), title from test where match('seven') and gid=1";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:1;a:3:{s:8:"sphinxql";s:113:"select id, gid, weight(), title from test where match('seven') and gid=1 option ranker=expr('sum(lcs)*1000+bm25')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:2;a:3:{s:8:"sphinxql";s:120:"select id, gid, weight(), title from test where match('seven') and gid=1 option ranker=expr('sum(300*lcs+700*lcs)+bm25')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:3;a:3:{s:8:"sphinxql";s:154:"select id, gid, weight(), title from test where match('seven|lies') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"223";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:4;a:3:{s:8:"sphinxql";s:167:"select id, gid, weight(), title from test where match('seven seven seven seven') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"111";s:5:"title";s:25:"Multiplied by seven again";}}}i:5;a:3:{s:8:"sphinxql";s:156:"select id, gid, weight(), title from test where match('seven !se7en') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"111";s:5:"title";s:25:"Multiplied by seven again";}}}i:6;a:3:{s:8:"sphinxql";s:163:"select id, gid, weight(), title from test where match('seven !(angels !by)') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:7;a:3:{s:8:"sphinxql";s:129:"select id, gid, weight(), title from test where match('lamb') and gid=2 option ranker=expr('doc_word_count*1000+sum(word_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1002";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:8;a:3:{s:8:"sphinxql";s:154:"select id, gid, weight(), title from dist where match('seven|lies') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"223";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:9;a:3:{s:8:"sphinxql";s:163:"select id, gid, weight(), title from dist where match('seven !(angels !by)') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:10;a:3:{s:8:"sphinxql";s:129:"select id, gid, weight(), title from dist where match('lamb') and gid=2 option ranker=expr('doc_word_count*1000+sum(word_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1002";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:11;a:3:{s:8:"sphinxql";s:115:"select id, gid, weight(), title from test where match('seven|seven|seven') option ranker=expr('sum(lcs)*1000+bm25')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:12;a:3:{s:8:"sphinxql";s:96:"select id, gid, weight(), title from test where match('mary') option ranker=expr('crc32(title)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:9:"998153602";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:9:"588047195";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:9:"189511395";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:13;a:3:{s:8:"sphinxql";s:95:"select id, gid, weight(), title from test where match('mary') option ranker=expr('in(mva32,1)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:14;a:3:{s:8:"sphinxql";s:95:"select id, gid, weight(), title from test where match('mary') option ranker=expr('in(mva64,1)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:15;a:3:{s:8:"sphinxql";s:175:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w2 from test where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {content=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"691";s:2:"w2";s:5:"69126";}i:1;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"580";s:2:"w2";s:5:"58066";}i:2;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"569";s:2:"w2";s:5:"56987";}}}i:16;a:3:{s:8:"sphinxql";s:177:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {content=1000}) * 100000 ) as w2 from test where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {content=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"691";s:2:"w2";s:5:"74511";}i:1;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"580";s:2:"w2";s:5:"57422";}i:2;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"569";s:2:"w2";s:5:"56135";}}}i:17;a:3:{s:8:"sphinxql";s:204:"select id, weight() as w1, FLOOR ( bm25f(2.2, 0.5) * 100000 ) as w2, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w3 from test where match('Mary lamb') option ranker=expr('bm25f(10.2, 0.5) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:2:"w1";s:3:"541";s:2:"w2";s:5:"61769";s:2:"w3";s:5:"69126";}i:1;a:4:{s:2:"id";s:3:"111";s:2:"w1";s:3:"521";s:2:"w2";s:5:"57314";s:2:"w3";s:5:"56987";}i:2;a:4:{s:2:"id";s:3:"112";s:2:"w1";s:3:"518";s:2:"w2";s:5:"56844";s:2:"w3";s:5:"58066";}}}i:18;a:3:{s:8:"sphinxql";s:90:"select id, weight() as w1, bm25f(2.2, 0.5) * 1000 as w2 from test where match('Mary lamb')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:4:"2671";s:2:"w2";s:8:"0.000000";}i:1;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:4:"1632";s:2:"w2";s:8:"0.000000";}i:2;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:4:"1611";s:2:"w2";s:8:"0.000000";}}}i:19;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:63:"packedfactors() and bm25f() requires using an expression ranker";}}}i:20;a:3:{s:8:"sphinxql";s:171:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {title=10}) * 100000 ) as w2 from test where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {title=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"728";s:2:"w2";s:5:"72822";}i:1;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"717";s:2:"w2";s:5:"71754";}i:2;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"716";s:2:"w2";s:5:"71657";}}}i:21;a:3:{s:8:"sphinxql";s:170:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {title=2}) * 100000 ) as w2 from test where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {title=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"728";s:2:"w2";s:5:"67820";}i:1;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"717";s:2:"w2";s:5:"64293";}i:2;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"716";s:2:"w2";s:5:"64247";}}}i:22;a:3:{s:8:"sphinxql";s:207:"select id, weight() as w1, FLOOR ( bm25f(2.2, 0.5) * 100000 ) as w2, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w3 from xml_ext where match('Mary lamb') option ranker=expr('bm25f(10.2, 0.5) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:2:"w1";s:3:"541";s:2:"w2";s:5:"61769";s:2:"w3";s:5:"69126";}i:1;a:4:{s:2:"id";s:3:"111";s:2:"w1";s:3:"521";s:2:"w2";s:5:"57314";s:2:"w3";s:5:"56987";}i:2;a:4:{s:2:"id";s:3:"112";s:2:"w1";s:3:"518";s:2:"w2";s:5:"56844";s:2:"w3";s:5:"58066";}}}i:23;a:3:{s:8:"sphinxql";s:207:"select id, weight() as w1, FLOOR ( bm25f(2.2, 0.5) * 100000 ) as w2, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w3 from xml_int where match('Mary lamb') option ranker=expr('bm25f(10.2, 0.5) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:2:"w1";s:3:"541";s:2:"w2";s:5:"61769";s:2:"w3";s:5:"69126";}i:1;a:4:{s:2:"id";s:3:"111";s:2:"w1";s:3:"521";s:2:"w2";s:5:"57314";s:2:"w3";s:5:"56987";}i:2;a:4:{s:2:"id";s:3:"112";s:2:"w1";s:3:"518";s:2:"w2";s:5:"56844";s:2:"w3";s:5:"58066";}}}i:24;a:3:{s:8:"sphinxql";s:175:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w2 from dist where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {content=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"691";s:2:"w2";s:5:"69126";}i:1;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"580";s:2:"w2";s:5:"58066";}i:2;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"569";s:2:"w2";s:5:"56987";}}}i:25;a:3:{s:8:"sphinxql";s:34:"select title gid from test limit 1";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:3:"gid";s:30:"Seven lies multiplied by seven";}}}i:26;a:3:{s:8:"sphinxql";s:182:"select *, weight() as w1, FLOOR( bm25f(1.2, 0.8)*1000 ) as w2 from test where match('( the | missed1 | seven ) !missed2 ') ORDER by id ASC option ranker=expr('bm25f(1.2,0.8) * 1000')";s:10:"total_rows";i:7;s:4:"rows";a:7:{i:0;a:9:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:5:"title";s:30:"Seven lies multiplied by seven";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"5";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"541";s:2:"w2";s:3:"541";}i:1;a:9:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:5:"title";s:25:"Multiplied by seven again";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"4";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"533";s:2:"w2";s:3:"533";}i:2;a:9:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:5:"title";s:32:"Seven angels with seven trumpets";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"5";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"541";s:2:"w2";s:3:"541";}i:3;a:9:{s:2:"id";s:3:"105";s:3:"gid";s:1:"1";s:5:"title";s:18:"John the Revelator";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"3";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"525";s:2:"w2";s:3:"525";}i:4;a:9:{s:2:"id";s:3:"108";s:3:"gid";s:1:"1";s:5:"title";s:18:"John the Revelator";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"3";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"525";s:2:"w2";s:3:"525";}i:5;a:9:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"8";s:11:"content_len";s:1:"6";s:2:"w1";s:3:"513";s:2:"w2";s:3:"513";}i:6;a:9:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"6";s:11:"content_len";s:1:"3";s:2:"w1";s:3:"517";s:2:"w2";s:3:"517";}}}i:27;a:3:{s:8:"sphinxql";s:138:"select *, packedfactors() from dup where match(' "the I the"~1 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:360:"bm25=1066, bm25a=0.635419, field_mask=2, doc_word_count=2, field1=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), word0=(tf=1, idf=0.215338), word1=(tf=1, idf=0.430677)";}}}i:28;a:3:{s:8:"sphinxql";s:140:"select *, packedfactors() from dup where match(' "the I the"~100 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.832547, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=1, hit_count=6, word_count=2, tf_idf=1.938044, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000860), word0=(tf=4, idf=0.215338), word1=(tf=4, idf=0.430677)";}}}i:29;a:3:{s:8:"sphinxql";s:136:"select *, packedfactors() from dup where match(' "the I"~100 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:608:"bm25=1066, bm25a=0.832547, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=2, hit_count=6, word_count=2, tf_idf=1.938044, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=44, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000830), word0=(tf=4, idf=0.215338), word1=(tf=4, idf=0.430677)";}}}i:30;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' "the I the"~1 the ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.685695, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=1, word_count=1, tf_idf=0.215338, min_idf=0.215338, max_idf=0.215338, sum_idf=0.215338, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.000000, atc=0.000000), field1=(lcs=1, hit_count=3, word_count=2, tf_idf=0.861353, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.000000, atc=0.000000), word0=(tf=3, idf=0.215338), word1=(tf=1, idf=0.430677)";}}}i:31;a:3:{s:8:"sphinxql";s:144:"select *, packedfactors() from dup where match(' "the I the"~100 the ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.832547, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=1, hit_count=6, word_count=2, tf_idf=1.938044, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=3, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000860), word0=(tf=4, idf=0.215338), word1=(tf=4, idf=0.430677)";}}}i:32;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' the "the I the"~1 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.685695, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=1, word_count=1, tf_idf=0.215338, min_idf=0.215338, max_idf=0.215338, sum_idf=0.215338, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=1, hit_count=3, word_count=2, tf_idf=0.861353, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000042), word0=(tf=3, idf=0.215338), word2=(tf=1, idf=0.430677)";}}}i:33;a:3:{s:8:"sphinxql";s:144:"select *, packedfactors() from dup where match(' the "the I the"~100 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.832547, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=1, hit_count=6, word_count=2, tf_idf=1.938044, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=3, min_gaps=0, exact_order=1, lccs=1, wlccs=0.215338, atc=0.000042), word0=(tf=4, idf=0.215338), word2=(tf=4, idf=0.430677)";}}}i:34;a:3:{s:8:"sphinxql";s:146:"select *, packedfactors() from dup where match(' (the who) | (the foo) ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";s:6:"f1_len";s:1:"2";s:6:"f2_len";s:1:"3";s:15:"packedfactors()";s:635:"bm25=1026, bm25a=1.313268, field_mask=3, doc_word_count=3, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=1, min_best_span_pos=1, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=2, wlccs=0.646015, atc=0.170150), field1=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=2, min_best_span_pos=2, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.430677, atc=0.170150), word0=(tf=2, idf=0.215338), word1=(tf=1, idf=0.430677), word3=(tf=1, idf=0.430677)";}}}i:35;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' what | foo | what ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";s:6:"f1_len";s:1:"2";s:6:"f2_len";s:1:"3";s:15:"packedfactors()";s:359:"bm25=891, bm25a=1.131144, field_mask=2, doc_word_count=2, field1=(lcs=1, hit_count=2, word_count=2, tf_idf=0.861353, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=1, min_best_span_pos=1, exact_hit=0, max_window_hits=2, min_gaps=1, exact_order=1, lccs=1, wlccs=0.430677, atc=0.104620), word0=(tf=1, idf=0.430677), word1=(tf=1, idf=0.430677)";}}}i:36;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' that | was | that ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:361:"bm25=1205, bm25a=1.014414, field_mask=2, doc_word_count=2, field1=(lcs=1, hit_count=12, word_count=2, tf_idf=5.168118, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=3, min_best_span_pos=3, exact_hit=0, max_window_hits=2, min_gaps=3, exact_order=1, lccs=1, wlccs=0.430677, atc=0.069327), word0=(tf=8, idf=0.430677), word1=(tf=4, idf=0.430677)";}}}i:37;a:3:{s:8:"sphinxql";s:143:"select *, packedfactors() from dup where match(' "that was that"~10 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:364:"bm25=1205, bm25a=0.798537, field_mask=2, doc_word_count=2, field1=(lcs=1, hit_count=4, word_count=2, tf_idf=1.722706, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=161, min_best_span_pos=161, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.430677, atc=0.001981), word0=(tf=2, idf=0.430677), word1=(tf=2, idf=0.430677)";}}}i:38;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' "maybe I" | "I m" ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:640:"bm25=1415, bm25a=1.002809, field_mask=3, doc_word_count=3, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.861353, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=10, min_best_span_pos=10, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.430677, atc=0.000000), field1=(lcs=2, hit_count=6, word_count=2, tf_idf=2.584059, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=38, min_best_span_pos=38, exact_hit=0, max_window_hits=1, min_gaps=18, exact_order=0, lccs=1, wlccs=0.000000, atc=0.000000), word0=(tf=1, idf=0.430677), word1=(tf=4, idf=0.430677), word3=(tf=3, idf=0.430677)";}}}i:39;a:3:{s:8:"sphinxql";s:162:"select *, packedfactors() from dup where match(' ( I NEAR/10 work) | (I NEAR/20 there) ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:638:"bm25=1489, bm25a=1.085626, field_mask=3, doc_word_count=3, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.861353, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=2, min_best_span_pos=2, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.000000, atc=0.000000), field1=(lcs=2, hit_count=8, word_count=3, tf_idf=3.445412, min_idf=0.430677, max_idf=0.430677, sum_idf=1.292030, min_hit_pos=62, min_best_span_pos=62, exact_hit=0, max_window_hits=1, min_gaps=44, exact_order=0, lccs=1, wlccs=0.430677, atc=0.000012), word0=(tf=5, idf=0.430677), word1=(tf=2, idf=0.430677), word3=(tf=3, idf=0.430677)";}}}i:40;a:3:{s:8:"sphinxql";s:105:"select *, weight() as w, packedfactors() from fields where match(' test ') option ranker=expr('sum(lcs)')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"idd";s:2:"11";s:1:"w";s:1:"4";s:15:"packedfactors()";s:1074:"bm25=500, bm25a=0.500000, field_mask=3, doc_word_count=1, field0=(lcs=1, hit_count=1, word_count=1, tf_idf=0.000000, min_idf=0.000000, max_idf=0.000000, sum_idf=0.000000, min_hit_pos=1, min_best_span_pos=1, exact_hit=1, max_window_hits=1, min_gaps=0, exact_order=1, lccs=1, wlccs=0.000000, atc=0.000000), field1=(lcs=1, hit_count=1, word_count=1, tf_idf=0.000000, min_idf=0.000000, max_idf=0.000000, sum_idf=0.000000, min_hit_pos=1, min_best_span_pos=1, exact_hit=1, max_window_hits=1, min_gaps=0, exact_order=1, lccs=1, wlccs=0.000000, atc=0.000000), field33=(lcs=1, hit_count=1, word_count=1, tf_idf=0.000000, min_idf=0.000000, max_idf=0.000000, sum_idf=0.000000, min_hit_pos=1, min_best_span_pos=1, exact_hit=1, max_window_hits=1, min_gaps=0, exact_order=1, lccs=1, wlccs=0.000000, atc=0.000000), field34=(lcs=1, hit_count=1, word_count=1, tf_idf=0.000000, min_idf=0.000000, max_idf=0.000000, sum_idf=0.000000, min_hit_pos=1, min_best_span_pos=1, exact_hit=1, max_window_hits=1, min_gaps=0, exact_order=1, lccs=1, wlccs=0.000000, atc=0.000000), word0=(tf=4, idf=0.000000)";}}}i:41;a:2:{s:8:"sphinxql";s:87:"update test set nonexistent=1.1, gid=1 where id=100 option ignore_nonexistent_columns=1";s:14:"total_affected";i:1;}i:42;a:3:{s:8:"sphinxql";s:167:"select id, weight() as w, packedfactors() from test where match(' "by seven" ') ORDER by id ASC option ranker=expr('sum(min_idf)*1000'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:3:"100";s:1:"w";s:3:"277";s:15:"packedfactors()";s:359:"bm25=834, bm25a=0.819381, field_mask=1, doc_word_count=2, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.632449, min_idf=0.277815, max_idf=0.354635, sum_idf=0.632449, min_hit_pos=4, min_best_span_pos=4, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.354635, atc=0.000000), word0=(tf=1, idf=0.354635), word1=(tf=1, idf=0.277815)";}i:1;a:3:{s:2:"id";s:3:"101";s:1:"w";s:3:"277";s:15:"packedfactors()";s:359:"bm25=787, bm25a=0.842942, field_mask=1, doc_word_count=2, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.632449, min_idf=0.277815, max_idf=0.354635, sum_idf=0.632449, min_hit_pos=2, min_best_span_pos=2, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.354635, atc=0.000000), word0=(tf=1, idf=0.354635), word1=(tf=1, idf=0.277815)";}}}i:43;a:3:{s:8:"sphinxql";s:167:"select id, weight() as w, rankfactors() from test where match(' "by seven" ') ORDER by id ASC option ranker=export('sum(min_idf)*1000'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:3:"100";s:1:"w";s:3:"277";s:13:"rankfactors()";s:294:"bm25=834, bm25a=0.819381, field_mask=1, doc_word_count=2, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.632449, min_idf=0.277815, max_idf=0.354635, sum_idf=0.632449, min_hit_pos=4, min_best_span_pos=4, exact_hit=0, max_window_hits=1), word1=(tf=1, idf=0.354635), word2=(tf=1, idf=0.277815)";}i:1;a:3:{s:2:"id";s:3:"101";s:1:"w";s:3:"277";s:13:"rankfactors()";s:294:"bm25=787, bm25a=0.842942, field_mask=1, doc_word_count=2, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.632449, min_idf=0.277815, max_idf=0.354635, sum_idf=0.632449, min_hit_pos=2, min_best_span_pos=2, exact_hit=0, max_window_hits=1), word1=(tf=1, idf=0.354635), word2=(tf=1, idf=0.277815)";}}}i:44;a:3:{s:8:"sphinxql";s:150:"select id, weight() as w from test where match(' "by seven" ') ORDER by id ASC option ranker=expr('sum(min_idf)*1000'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:3:"100";s:1:"w";s:3:"277";}i:1;a:2:{s:2:"id";s:3:"101";s:1:"w";s:3:"277";}}}i:45;a:3:{s:8:"sphinxql";s:80:"select id, weight() from dup where match('the the') option ranker=proximity_bm25";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"3";s:8:"weight()";s:4:"2589";}i:1;a:2:{s:2:"id";s:1:"1";s:8:"weight()";s:4:"2578";}}}i:46;a:3:{s:8:"sphinxql";s:104:"select id, weight() from dup where match('the the') option ranker=expr('sum(lcs*user_weight)*1000+bm25')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"3";s:8:"weight()";s:4:"2589";}i:1;a:2:{s:2:"id";s:1:"1";s:8:"weight()";s:4:"2578";}}}}}
\ No newline at end of file
+a:1:{i:0;a:48:{i:0;a:3:{s:8:"sphinxql";s:72:"select id, gid, weight(), title from test where match('seven') and gid=1";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:1;a:3:{s:8:"sphinxql";s:113:"select id, gid, weight(), title from test where match('seven') and gid=1 option ranker=expr('sum(lcs)*1000+bm25')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:2;a:3:{s:8:"sphinxql";s:120:"select id, gid, weight(), title from test where match('seven') and gid=1 option ranker=expr('sum(300*lcs+700*lcs)+bm25')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:3;a:3:{s:8:"sphinxql";s:154:"select id, gid, weight(), title from test where match('seven|lies') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"223";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:4;a:3:{s:8:"sphinxql";s:167:"select id, gid, weight(), title from test where match('seven seven seven seven') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"111";s:5:"title";s:25:"Multiplied by seven again";}}}i:5;a:3:{s:8:"sphinxql";s:156:"select id, gid, weight(), title from test where match('seven !se7en') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"111";s:5:"title";s:25:"Multiplied by seven again";}}}i:6;a:3:{s:8:"sphinxql";s:163:"select id, gid, weight(), title from test where match('seven !(angels !by)') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:7;a:3:{s:8:"sphinxql";s:129:"select id, gid, weight(), title from test where match('lamb') and gid=2 option ranker=expr('doc_word_count*1000+sum(word_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1002";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:8;a:3:{s:8:"sphinxql";s:154:"select id, gid, weight(), title from dist where match('seven|lies') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"223";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:9;a:3:{s:8:"sphinxql";s:163:"select id, gid, weight(), title from dist where match('seven !(angels !by)') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:10;a:3:{s:8:"sphinxql";s:129:"select id, gid, weight(), title from dist where match('lamb') and gid=2 option ranker=expr('doc_word_count*1000+sum(word_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1002";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:11;a:3:{s:8:"sphinxql";s:115:"select id, gid, weight(), title from test where match('seven|seven|seven') option ranker=expr('sum(lcs)*1000+bm25')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:12;a:3:{s:8:"sphinxql";s:96:"select id, gid, weight(), title from test where match('mary') option ranker=expr('crc32(title)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:9:"998153602";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:9:"588047195";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:9:"189511395";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:13;a:3:{s:8:"sphinxql";s:95:"select id, gid, weight(), title from test where match('mary') option ranker=expr('in(mva32,1)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:14;a:3:{s:8:"sphinxql";s:95:"select id, gid, weight(), title from test where match('mary') option ranker=expr('in(mva64,1)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:1:"1";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}i:15;a:3:{s:8:"sphinxql";s:175:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w2 from test where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {content=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"691";s:2:"w2";s:5:"69126";}i:1;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"580";s:2:"w2";s:5:"58066";}i:2;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"569";s:2:"w2";s:5:"56987";}}}i:16;a:3:{s:8:"sphinxql";s:177:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {content=1000}) * 100000 ) as w2 from test where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {content=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"691";s:2:"w2";s:5:"74511";}i:1;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"580";s:2:"w2";s:5:"57422";}i:2;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"569";s:2:"w2";s:5:"56135";}}}i:17;a:3:{s:8:"sphinxql";s:204:"select id, weight() as w1, FLOOR ( bm25f(2.2, 0.5) * 100000 ) as w2, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w3 from test where match('Mary lamb') option ranker=expr('bm25f(10.2, 0.5) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:2:"w1";s:3:"541";s:2:"w2";s:5:"61769";s:2:"w3";s:5:"69126";}i:1;a:4:{s:2:"id";s:3:"111";s:2:"w1";s:3:"521";s:2:"w2";s:5:"57314";s:2:"w3";s:5:"56987";}i:2;a:4:{s:2:"id";s:3:"112";s:2:"w1";s:3:"518";s:2:"w2";s:5:"56844";s:2:"w3";s:5:"58066";}}}i:18;a:3:{s:8:"sphinxql";s:90:"select id, weight() as w1, bm25f(2.2, 0.5) * 1000 as w2 from test where match('Mary lamb')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:4:"2671";s:2:"w2";s:8:"0.000000";}i:1;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:4:"1632";s:2:"w2";s:8:"0.000000";}i:2;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:4:"1611";s:2:"w2";s:8:"0.000000";}}}i:19;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:63:"packedfactors() and bm25f() requires using an expression ranker";}}}i:20;a:3:{s:8:"sphinxql";s:171:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {title=10}) * 100000 ) as w2 from test where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {title=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"728";s:2:"w2";s:5:"72822";}i:1;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"717";s:2:"w2";s:5:"71754";}i:2;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"716";s:2:"w2";s:5:"71657";}}}i:21;a:3:{s:8:"sphinxql";s:170:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {title=2}) * 100000 ) as w2 from test where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {title=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"728";s:2:"w2";s:5:"67820";}i:1;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"717";s:2:"w2";s:5:"64293";}i:2;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"716";s:2:"w2";s:5:"64247";}}}i:22;a:3:{s:8:"sphinxql";s:207:"select id, weight() as w1, FLOOR ( bm25f(2.2, 0.5) * 100000 ) as w2, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w3 from xml_ext where match('Mary lamb') option ranker=expr('bm25f(10.2, 0.5) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:2:"w1";s:3:"541";s:2:"w2";s:5:"61769";s:2:"w3";s:5:"69126";}i:1;a:4:{s:2:"id";s:3:"111";s:2:"w1";s:3:"521";s:2:"w2";s:5:"57314";s:2:"w3";s:5:"56987";}i:2;a:4:{s:2:"id";s:3:"112";s:2:"w1";s:3:"518";s:2:"w2";s:5:"56844";s:2:"w3";s:5:"58066";}}}i:23;a:3:{s:8:"sphinxql";s:207:"select id, weight() as w1, FLOOR ( bm25f(2.2, 0.5) * 100000 ) as w2, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w3 from xml_int where match('Mary lamb') option ranker=expr('bm25f(10.2, 0.5) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:2:"w1";s:3:"541";s:2:"w2";s:5:"61769";s:2:"w3";s:5:"69126";}i:1;a:4:{s:2:"id";s:3:"111";s:2:"w1";s:3:"521";s:2:"w2";s:5:"57314";s:2:"w3";s:5:"56987";}i:2;a:4:{s:2:"id";s:3:"112";s:2:"w1";s:3:"518";s:2:"w2";s:5:"56844";s:2:"w3";s:5:"58066";}}}i:24;a:3:{s:8:"sphinxql";s:175:"select id, weight() as w1, FLOOR ( bm25f(1.2, 0.8, {content=10}) * 100000 ) as w2 from dist where match('Mary lamb') option ranker=expr('bm25f(1.2, 0.8, {content=10}) * 1000')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:3:"110";s:2:"w1";s:3:"691";s:2:"w2";s:5:"69126";}i:1;a:3:{s:2:"id";s:3:"112";s:2:"w1";s:3:"580";s:2:"w2";s:5:"58066";}i:2;a:3:{s:2:"id";s:3:"111";s:2:"w1";s:3:"569";s:2:"w2";s:5:"56987";}}}i:25;a:3:{s:8:"sphinxql";s:34:"select title gid from test limit 1";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:3:"gid";s:30:"Seven lies multiplied by seven";}}}i:26;a:3:{s:8:"sphinxql";s:182:"select *, weight() as w1, FLOOR( bm25f(1.2, 0.8)*1000 ) as w2 from test where match('( the | missed1 | seven ) !missed2 ') ORDER by id ASC option ranker=expr('bm25f(1.2,0.8) * 1000')";s:10:"total_rows";i:7;s:4:"rows";a:7:{i:0;a:9:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:5:"title";s:30:"Seven lies multiplied by seven";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"5";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"541";s:2:"w2";s:3:"541";}i:1;a:9:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:5:"title";s:25:"Multiplied by seven again";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"4";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"533";s:2:"w2";s:3:"533";}i:2;a:9:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:5:"title";s:32:"Seven angels with seven trumpets";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"5";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"541";s:2:"w2";s:3:"541";}i:3;a:9:{s:2:"id";s:3:"105";s:3:"gid";s:1:"1";s:5:"title";s:18:"John the Revelator";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"3";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"525";s:2:"w2";s:3:"525";}i:4;a:9:{s:2:"id";s:3:"108";s:3:"gid";s:1:"1";s:5:"title";s:18:"John the Revelator";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"3";s:11:"content_len";s:1:"0";s:2:"w1";s:3:"525";s:2:"w2";s:3:"525";}i:5;a:9:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"8";s:11:"content_len";s:1:"6";s:2:"w1";s:3:"513";s:2:"w2";s:3:"513";}i:6;a:9:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";s:5:"mva32";s:5:"1,2,3";s:5:"mva64";s:5:"1,2,3";s:9:"title_len";s:1:"6";s:11:"content_len";s:1:"3";s:2:"w1";s:3:"517";s:2:"w2";s:3:"517";}}}i:27;a:3:{s:8:"sphinxql";s:138:"select *, packedfactors() from dup where match(' "the I the"~1 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:360:"bm25=1066, bm25a=0.635419, field_mask=2, doc_word_count=2, field1=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), word0=(tf=1, idf=0.215338), word1=(tf=1, idf=0.430677)";}}}i:28;a:3:{s:8:"sphinxql";s:140:"select *, packedfactors() from dup where match(' "the I the"~100 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.832547, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=1, hit_count=6, word_count=2, tf_idf=1.938044, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000860), word0=(tf=4, idf=0.215338), word1=(tf=4, idf=0.430677)";}}}i:29;a:3:{s:8:"sphinxql";s:136:"select *, packedfactors() from dup where match(' "the I"~100 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:608:"bm25=1066, bm25a=0.832547, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=2, hit_count=6, word_count=2, tf_idf=1.938044, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=44, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000830), word0=(tf=4, idf=0.215338), word1=(tf=4, idf=0.430677)";}}}i:30;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' "the I the"~1 the ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.685695, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=1, word_count=1, tf_idf=0.215338, min_idf=0.215338, max_idf=0.215338, sum_idf=0.215338, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.000000, atc=0.000000), field1=(lcs=1, hit_count=3, word_count=2, tf_idf=0.861353, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.000000, atc=0.000000), word0=(tf=3, idf=0.215338), word1=(tf=1, idf=0.430677)";}}}i:31;a:3:{s:8:"sphinxql";s:144:"select *, packedfactors() from dup where match(' "the I the"~100 the ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.832547, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=1, hit_count=6, word_count=2, tf_idf=1.938044, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=3, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000860), word0=(tf=4, idf=0.215338), word1=(tf=4, idf=0.430677)";}}}i:32;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' the "the I the"~1 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.685695, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=1, word_count=1, tf_idf=0.215338, min_idf=0.215338, max_idf=0.215338, sum_idf=0.215338, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=1, hit_count=3, word_count=2, tf_idf=0.861353, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000042), word0=(tf=3, idf=0.215338), word2=(tf=1, idf=0.430677)";}}}i:33;a:3:{s:8:"sphinxql";s:144:"select *, packedfactors() from dup where match(' the "the I the"~100 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:607:"bm25=1066, bm25a=0.832547, field_mask=3, doc_word_count=2, field0=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.215338, atc=0.000000), field1=(lcs=1, hit_count=6, word_count=2, tf_idf=1.938044, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=8, min_best_span_pos=8, exact_hit=0, max_window_hits=3, min_gaps=0, exact_order=1, lccs=1, wlccs=0.215338, atc=0.000042), word0=(tf=4, idf=0.215338), word2=(tf=4, idf=0.430677)";}}}i:34;a:3:{s:8:"sphinxql";s:146:"select *, packedfactors() from dup where match(' (the who) | (the foo) ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";s:6:"f1_len";s:1:"2";s:6:"f2_len";s:1:"3";s:15:"packedfactors()";s:635:"bm25=1026, bm25a=1.313268, field_mask=3, doc_word_count=3, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=1, min_best_span_pos=1, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=2, wlccs=0.646015, atc=0.170150), field1=(lcs=1, hit_count=2, word_count=2, tf_idf=0.646015, min_idf=0.215338, max_idf=0.430677, sum_idf=0.646015, min_hit_pos=2, min_best_span_pos=2, exact_hit=0, max_window_hits=2, min_gaps=0, exact_order=0, lccs=1, wlccs=0.430677, atc=0.170150), word0=(tf=2, idf=0.215338), word1=(tf=1, idf=0.430677), word3=(tf=1, idf=0.430677)";}}}i:35;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' what | foo | what ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";s:6:"f1_len";s:1:"2";s:6:"f2_len";s:1:"3";s:15:"packedfactors()";s:359:"bm25=891, bm25a=1.131144, field_mask=2, doc_word_count=2, field1=(lcs=1, hit_count=2, word_count=2, tf_idf=0.861353, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=1, min_best_span_pos=1, exact_hit=0, max_window_hits=2, min_gaps=1, exact_order=1, lccs=1, wlccs=0.430677, atc=0.104620), word0=(tf=1, idf=0.430677), word1=(tf=1, idf=0.430677)";}}}i:36;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' that | was | that ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:361:"bm25=1205, bm25a=1.014414, field_mask=2, doc_word_count=2, field1=(lcs=1, hit_count=12, word_count=2, tf_idf=5.168118, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=3, min_best_span_pos=3, exact_hit=0, max_window_hits=2, min_gaps=3, exact_order=1, lccs=1, wlccs=0.430677, atc=0.069327), word0=(tf=8, idf=0.430677), word1=(tf=4, idf=0.430677)";}}}i:37;a:3:{s:8:"sphinxql";s:143:"select *, packedfactors() from dup where match(' "that was that"~10 ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:364:"bm25=1205, bm25a=0.798537, field_mask=2, doc_word_count=2, field1=(lcs=1, hit_count=4, word_count=2, tf_idf=1.722706, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=161, min_best_span_pos=161, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.430677, atc=0.001981), word0=(tf=2, idf=0.430677), word1=(tf=2, idf=0.430677)";}}}i:38;a:3:{s:8:"sphinxql";s:142:"select *, packedfactors() from dup where match(' "maybe I" | "I m" ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:640:"bm25=1415, bm25a=1.002809, field_mask=3, doc_word_count=3, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.861353, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=10, min_best_span_pos=10, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.430677, atc=0.000000), field1=(lcs=2, hit_count=6, word_count=2, tf_idf=2.584059, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=38, min_best_span_pos=38, exact_hit=0, max_window_hits=1, min_gaps=18, exact_order=0, lccs=1, wlccs=0.000000, atc=0.000000), word0=(tf=1, idf=0.430677), word1=(tf=4, idf=0.430677), word3=(tf=3, idf=0.430677)";}}}i:39;a:3:{s:8:"sphinxql";s:162:"select *, packedfactors() from dup where match(' ( I NEAR/10 work) | (I NEAR/20 there) ') ORDER by id ASC option ranker=expr('1'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";s:6:"f1_len";s:2:"15";s:6:"f2_len";s:3:"253";s:15:"packedfactors()";s:638:"bm25=1489, bm25a=1.085626, field_mask=3, doc_word_count=3, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.861353, min_idf=0.430677, max_idf=0.430677, sum_idf=0.861353, min_hit_pos=2, min_best_span_pos=2, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.000000, atc=0.000000), field1=(lcs=2, hit_count=8, word_count=3, tf_idf=3.445412, min_idf=0.430677, max_idf=0.430677, sum_idf=1.292030, min_hit_pos=62, min_best_span_pos=62, exact_hit=0, max_window_hits=1, min_gaps=44, exact_order=0, lccs=1, wlccs=0.430677, atc=0.000012), word0=(tf=5, idf=0.430677), word1=(tf=2, idf=0.430677), word3=(tf=3, idf=0.430677)";}}}i:40;a:3:{s:8:"sphinxql";s:105:"select *, weight() as w, packedfactors() from fields where match(' test ') option ranker=expr('sum(lcs)')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"idd";s:2:"11";s:1:"w";s:1:"4";s:15:"packedfactors()";s:1074:"bm25=500, bm25a=0.500000, field_mask=3, doc_word_count=1, field0=(lcs=1, hit_count=1, word_count=1, tf_idf=0.000000, min_idf=0.000000, max_idf=0.000000, sum_idf=0.000000, min_hit_pos=1, min_best_span_pos=1, exact_hit=1, max_window_hits=1, min_gaps=0, exact_order=1, lccs=1, wlccs=0.000000, atc=0.000000), field1=(lcs=1, hit_count=1, word_count=1, tf_idf=0.000000, min_idf=0.000000, max_idf=0.000000, sum_idf=0.000000, min_hit_pos=1, min_best_span_pos=1, exact_hit=1, max_window_hits=1, min_gaps=0, exact_order=1, lccs=1, wlccs=0.000000, atc=0.000000), field33=(lcs=1, hit_count=1, word_count=1, tf_idf=0.000000, min_idf=0.000000, max_idf=0.000000, sum_idf=0.000000, min_hit_pos=1, min_best_span_pos=1, exact_hit=1, max_window_hits=1, min_gaps=0, exact_order=1, lccs=1, wlccs=0.000000, atc=0.000000), field34=(lcs=1, hit_count=1, word_count=1, tf_idf=0.000000, min_idf=0.000000, max_idf=0.000000, sum_idf=0.000000, min_hit_pos=1, min_best_span_pos=1, exact_hit=1, max_window_hits=1, min_gaps=0, exact_order=1, lccs=1, wlccs=0.000000, atc=0.000000), word0=(tf=4, idf=0.000000)";}}}i:41;a:2:{s:8:"sphinxql";s:87:"update test set nonexistent=1.1, gid=1 where id=100 option ignore_nonexistent_columns=1";s:14:"total_affected";i:1;}i:42;a:3:{s:8:"sphinxql";s:167:"select id, weight() as w, packedfactors() from test where match(' "by seven" ') ORDER by id ASC option ranker=expr('sum(min_idf)*1000'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:3:"100";s:1:"w";s:3:"277";s:15:"packedfactors()";s:359:"bm25=834, bm25a=0.819381, field_mask=1, doc_word_count=2, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.632449, min_idf=0.277815, max_idf=0.354635, sum_idf=0.632449, min_hit_pos=4, min_best_span_pos=4, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.354635, atc=0.000000), word0=(tf=1, idf=0.354635), word1=(tf=1, idf=0.277815)";}i:1;a:3:{s:2:"id";s:3:"101";s:1:"w";s:3:"277";s:15:"packedfactors()";s:359:"bm25=787, bm25a=0.842942, field_mask=1, doc_word_count=2, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.632449, min_idf=0.277815, max_idf=0.354635, sum_idf=0.632449, min_hit_pos=2, min_best_span_pos=2, exact_hit=0, max_window_hits=1, min_gaps=0, exact_order=0, lccs=1, wlccs=0.354635, atc=0.000000), word0=(tf=1, idf=0.354635), word1=(tf=1, idf=0.277815)";}}}i:43;a:3:{s:8:"sphinxql";s:167:"select id, weight() as w, rankfactors() from test where match(' "by seven" ') ORDER by id ASC option ranker=export('sum(min_idf)*1000'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:3:"100";s:1:"w";s:3:"277";s:13:"rankfactors()";s:294:"bm25=834, bm25a=0.819381, field_mask=1, doc_word_count=2, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.632449, min_idf=0.277815, max_idf=0.354635, sum_idf=0.632449, min_hit_pos=4, min_best_span_pos=4, exact_hit=0, max_window_hits=1), word1=(tf=1, idf=0.354635), word2=(tf=1, idf=0.277815)";}i:1;a:3:{s:2:"id";s:3:"101";s:1:"w";s:3:"277";s:13:"rankfactors()";s:294:"bm25=787, bm25a=0.842942, field_mask=1, doc_word_count=2, field0=(lcs=2, hit_count=2, word_count=2, tf_idf=0.632449, min_idf=0.277815, max_idf=0.354635, sum_idf=0.632449, min_hit_pos=2, min_best_span_pos=2, exact_hit=0, max_window_hits=1), word1=(tf=1, idf=0.354635), word2=(tf=1, idf=0.277815)";}}}i:44;a:3:{s:8:"sphinxql";s:150:"select id, weight() as w from test where match(' "by seven" ') ORDER by id ASC option ranker=expr('sum(min_idf)*1000'), idf='plain,tfidf_unnormalized'";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:3:"100";s:1:"w";s:3:"277";}i:1;a:2:{s:2:"id";s:3:"101";s:1:"w";s:3:"277";}}}i:45;a:3:{s:8:"sphinxql";s:80:"select id, weight() from dup where match('the the') option ranker=proximity_bm25";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"3";s:8:"weight()";s:4:"2589";}i:1;a:2:{s:2:"id";s:1:"1";s:8:"weight()";s:4:"2578";}}}i:46;a:3:{s:8:"sphinxql";s:104:"select id, weight() from dup where match('the the') option ranker=expr('sum(lcs*user_weight)*1000+bm25')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"3";s:8:"weight()";s:4:"2589";}i:1;a:2:{s:2:"id";s:1:"1";s:8:"weight()";s:4:"2578";}}}i:47;a:3:{s:8:"sphinxql";s:93:"select id, weight() from test where match('seven|lies') option ranker=expr('sum(1000*wlccs)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:3:"100";s:8:"weight()";s:3:"366";}i:1;a:2:{s:2:"id";s:3:"101";s:8:"weight()";s:3:"123";}i:2;a:2:{s:2:"id";s:3:"102";s:8:"weight()";s:3:"123";}}}}}
\ No newline at end of file
diff --git a/test/test_184/test.xml b/test/test_184/test.xml
index 6d289c38..27c61976 100644
--- a/test/test_184/test.xml
+++ b/test/test_184/test.xml
@@ -214,6 +214,9 @@ INSERT INTO test_table VALUES
select id, weight() from dup where match('the the') option ranker=proximity_bm25select id, weight() from dup where match('the the') option ranker=expr('sum(lcs*user_weight)*1000+bm25')
+
+select id, weight() from test where match('seven|lies') option ranker=expr('sum(1000*wlccs)')
+
From d4f6195ca68dca0d66bb5b2551621f54632a5bfb Mon Sep 17 00:00:00 2001
From: tomat
Date: Mon, 16 Feb 2015 20:52:36 +0000
Subject: [PATCH 04/73] fixed #2170 indexer failure on joined with docid=0 and
dupes at field added regression to test 146
---
src/sphinx.cpp | 6 ++++--
test/test_146/model.bin | 2 +-
test/test_146/test.xml | 23 +++++++++++++++++++++++
3 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/src/sphinx.cpp b/src/sphinx.cpp
index e4f6c02f..bfd7f872 100644
--- a/src/sphinx.cpp
+++ b/src/sphinx.cpp
@@ -25818,10 +25818,12 @@ bool CSphSource_Document::IterateDocument ( CSphString & sError )
for ( ;; )
{
m_tState.m_dFields = NextDocument ( sError );
- if ( HasJoinedFields() )
- m_dAllIds.Add ( m_tDocInfo.m_uDocID );
if ( m_tDocInfo.m_uDocID==0 )
return true;
+ // moved that here as docid==0 means eof for regular query
+ // but joined might produce doc with docid==0 and breaks delta packing
+ if ( HasJoinedFields() )
+ m_dAllIds.Add ( m_tDocInfo.m_uDocID );
if ( !m_tState.m_dFields )
return false;
diff --git a/test/test_146/model.bin b/test/test_146/model.bin
index eaacbcbe..a47ccbfd 100644
--- a/test/test_146/model.bin
+++ b/test/test_146/model.bin
@@ -1 +1 @@
-a:1:{i:0;a:13:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"aaa";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"bbb";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"aaa | bbb";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""aaa bbb"";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"( kkk zzz ) | "do dog"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:"( kkk zzz ) | "do not as dog"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2680";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""kkk zzz"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2680";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"cool";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""zzz not as not cool"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1572";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:5:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"look";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:4:"cool";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:""zzz do dog look cool"/2";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:"dog not as do sleepy";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""dog not as do sleepy"";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"3680";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""do not as dog sleepy"";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1560";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2620";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"my";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:"( dog sleepy ) | my";}}}
\ No newline at end of file
+a:1:{i:0;a:14:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"aaa";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"bbb";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"aaa | bbb";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""aaa bbb"";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"( kkk zzz ) | "do dog"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:"( kkk zzz ) | "do not as dog"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2680";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""kkk zzz"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2680";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"cool";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""zzz not as not cool"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1572";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:5:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"look";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:4:"cool";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:""zzz do dog look cool"/2";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:"dog not as do sleepy";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""dog not as do sleepy"";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"3680";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""do not as dog sleepy"";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1560";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2620";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"my";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:"( dog sleepy ) | my";}i:13;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:2:"t1";i:1;s:2:"t2";i:2;s:2:"t1";i:3;s:2:"t1";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:3:{i:490495;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}i:490496;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}i:490497;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}}
\ No newline at end of file
diff --git a/test/test_146/test.xml b/test/test_146/test.xml
index b56941ab..73ad502c 100644
--- a/test/test_146/test.xml
+++ b/test/test_146/test.xml
@@ -74,6 +74,27 @@ index ignore_absent_joined_ids
path = /ignore_absent_joined_ids
}
+source multi_joined
+{
+ type = mysql
+
+ sql_attr_uint = idd
+
+ sql_query = SELECT 490495 id, 11 idd, 'Beast Obsessed 3 - Scene 12 - Future Works' t1, '' t2 UNION SELECT 490496 id, 11 idd, 'Hot Fonde Aaliyah Love Foo Her Stud Longer' t1, 'When Ryan comes into the picture' t2 UNION SELECT 490497 id, 11 idd, 'Daia Gloomer Big Noob In Prague' t1, 'Daia Gloomer Big Noob' t2
+
+ sql_joined_field = t1 from query; SELECT 0 id, 'aspirine brunette fooneling powder solo latina group salsa webcam gum idling shovel european killing too tan lines' t1 UNION SELECT 490495 id, 'job babe cow busty mugshot wire all full trip' t1 UNION SELECT 490496 id, 'hd fonde style glamour love madison ryan aaliyah' t1 UNION SELECT 490497 id, 'job salsa redhead famous shot tilt daia gloomer' t1
+ sql_joined_field = t1 from query; SELECT 490496 id, 'Aaliyah Love' t1
+}
+
+index multi_joined
+{
+ source = multi_joined
+ path = /multi_joined
+
+ docinfo = extern
+ charset_table = 0..9, a..z, A..Z->a..z, _
+}
+
@@ -129,6 +150,8 @@ insert into test_joined (id, text) values
"do not as dog sleepy"( dog sleepy ) | my
+
+
From ab26efb002501a030349daa8af8dca4c2b6a92be Mon Sep 17 00:00:00 2001
From: tomat
Date: Tue, 17 Feb 2015 12:02:40 +0000
Subject: [PATCH 05/73] added feature #2176 per agent options (ha_strategy,
conn, blackhole)
---
src/searchd.cpp | 263 +++++++++++++++++++++++++++++++++++++-----------
1 file changed, 204 insertions(+), 59 deletions(-)
diff --git a/src/searchd.cpp b/src/searchd.cpp
index b1b80784..e7a0081c 100644
--- a/src/searchd.cpp
+++ b/src/searchd.cpp
@@ -3578,7 +3578,9 @@ enum HAStrategies_e {
HA_AVOIDDEAD,
HA_AVOIDERRORS,
HA_AVOIDDEADTM, ///< the same as HA_AVOIDDEAD, but uses just min timeout instead of weighted random
- HA_AVOIDERRORSTM ///< the same as HA_AVOIDERRORS, but uses just min timeout instead of weighted random
+ HA_AVOIDERRORSTM, ///< the same as HA_AVOIDERRORS, but uses just min timeout instead of weighted random
+
+ HA_DEFAULT = HA_RANDOM
};
class InterWorkerStorage : public ISphNoncopyable
@@ -3677,6 +3679,7 @@ struct MetaAgentDesc_t
int * m_pRRCounter; /// pointer not owned, pointee IPC-shared
InterWorkerStorage * m_pLock; /// pointer not owned, lock for threads/IPC
DWORD m_uTimestamp;
+ HAStrategies_e m_eStrategy;
public:
MetaAgentDesc_t ()
@@ -3684,6 +3687,7 @@ struct MetaAgentDesc_t
, m_pRRCounter ( NULL )
, m_pLock ( NULL )
, m_uTimestamp ( HostDashboard_t::GetCurSeconds() )
+ , m_eStrategy ( HA_DEFAULT )
{}
MetaAgentDesc_t ( const MetaAgentDesc_t & rhs )
@@ -3697,6 +3701,17 @@ struct MetaAgentDesc_t
m_dAgents[i].m_bPersistent = true;
}
+ void SetBlackhole ()
+ {
+ ARRAY_FOREACH ( i, m_dAgents )
+ m_dAgents[i].m_bBlackhole = true;
+ }
+
+ void SetStrategy ( HAStrategies_e eStrategy )
+ {
+ m_eStrategy = eStrategy;
+ }
+
inline void SetHAData ( int * pRRCounter, WORD * pWeights, InterWorkerStorage * pLock )
{
m_pRRCounter = pRRCounter;
@@ -4055,9 +4070,9 @@ struct MetaAgentDesc_t
}
- AgentDesc_t * GetRRAgent ( HAStrategies_e eStrategy )
+ AgentDesc_t * GetRRAgent ()
{
- switch ( eStrategy )
+ switch ( m_eStrategy )
{
case HA_AVOIDDEAD:
return StDiscardDead();
@@ -4250,7 +4265,7 @@ struct DistributedIndex_t
, m_iAgentQueryTimeout ( g_iAgentQueryTimeout )
, m_bToDelete ( false )
, m_bDivideRemoteRanges ( false )
- , m_eHaStrategy ( HA_RANDOM )
+ , m_eHaStrategy ( HA_DEFAULT )
, m_pHAStorage ( NULL )
{}
~DistributedIndex_t()
@@ -10496,7 +10511,7 @@ void SearchHandler_c::RunSubset ( int iStart, int iEnd )
dAgents.Reserve ( dAgents.GetLength() + pDist->m_dAgents.GetLength() );
ARRAY_FOREACH ( j, pDist->m_dAgents )
{
- dAgents.Add().TakeTraits ( *pDist->m_dAgents[j].GetRRAgent ( pDist->m_eHaStrategy ) );
+ dAgents.Add().TakeTraits ( *pDist->m_dAgents[j].GetRRAgent() );
dAgents.Last().m_iStoreTag = iTagsCount;
dAgents.Last().m_iWeight = iWeight;
iTagsCount += iTagStep;
@@ -12826,7 +12841,7 @@ bool MakeSnippets ( CSphString sIndex, CSphVector & dQueries, CS
dDistLocal = pDist->m_dLocal;
dRemoteSnippets.m_dAgents.Resize ( pDist->m_dAgents.GetLength() );
ARRAY_FOREACH ( i, pDist->m_dAgents )
- dRemoteSnippets.m_dAgents[i].TakeTraits ( *pDist->m_dAgents[i].GetRRAgent ( pDist->m_eHaStrategy ) );
+ dRemoteSnippets.m_dAgents[i].TakeTraits ( *pDist->m_dAgents[i].GetRRAgent() );
}
g_tDistLock.Unlock();
@@ -19927,7 +19942,7 @@ bool PrereadNewIndex ( ServedIndex_t & tIdx, const CSphConfigSection & hIndex, c
return true;
}
-bool ValidateAgentDesc ( MetaAgentDesc_t & tAgent, const CSphVariant * pLine, const char * szIndexName, bool bBlackhole )
+bool ValidateAgentDesc ( MetaAgentDesc_t & tAgent, const CSphVariant * pLine, const char * szIndexName )
{
AgentDesc_t * pAgent = tAgent.LastAgent();
assert ( pAgent );
@@ -19947,8 +19962,6 @@ bool ValidateAgentDesc ( MetaAgentDesc_t & tAgent, const CSphVariant * pLine, co
// hash for dashboard
CSphString sHashKey = pAgent->GetName();
- pAgent->m_bBlackhole = bBlackhole;
-
// allocate stats slot
// let us cheat and also allocate the dashboard slot under the same lock
if ( g_pStats )
@@ -19994,13 +20007,59 @@ bool ValidateAgentDesc ( MetaAgentDesc_t & tAgent, const CSphVariant * pLine, co
}
return true;
}
-enum eAgentParse { apInHost, apInPort, apStartIndexList, apIndexList, apDone };
-bool ConfigureAgent ( MetaAgentDesc_t & tAgent, const CSphVariant * pAgent, const char * szIndexName, bool bBlackhole, bool bPersistent=false )
+
+#define sphStrMatchStatic(_str, _cstr) ( strncmp ( _str, _cstr, sizeof(_str)-1 )==0 )
+
+
+static bool ParseStrategyHA ( const char * sName, HAStrategies_e & eStrategy )
+{
+ if ( sphStrMatchStatic ( "random", sName ) )
+ eStrategy = HA_RANDOM;
+ else if ( sphStrMatchStatic ( "roundrobin", sName ) )
+ eStrategy = HA_ROUNDROBIN;
+ else if ( sphStrMatchStatic ( "nodeads", sName ) )
+ eStrategy = HA_AVOIDDEAD;
+ else if ( sphStrMatchStatic ( "noerrors", sName ) )
+ eStrategy = HA_AVOIDERRORS;
+ else
+ return false;
+
+ return true;
+}
+
+static bool IsAgentDelimiter ( char c )
+{
+ return c=='|' || c=='[' || c==']';
+}
+
+struct AgentOptions_t
+{
+ bool m_bBlackhole;
+ bool m_bPersistent;
+ HAStrategies_e m_eStrategy;
+};
+
+enum AgentParse_e { apInHost, apInPort, apStartIndexList, apIndexList, apOptions, apDone };
+
+bool ConfigureAgent ( MetaAgentDesc_t & tAgent, const CSphVariant * pAgent, const char * szIndexName, AgentOptions_t tDesc )
{
- eAgentParse eState = apInHost;
AgentDesc_t * pCurrent = tAgent.NewAgent();
+
// extract host name or path
const char * p = pAgent->cstr();
+ while ( *p && isspace ( *p ) )
+ p++;
+ AgentParse_e eState = apDone;
+ // might be agent options at head
+ if ( *p )
+ {
+ if ( *p=='[' )
+ {
+ eState = apOptions;
+ p += 1;
+ } else
+ eState = apInHost;
+ }
const char * pAnchor = p;
while ( eState!=apDone )
@@ -20009,8 +20068,15 @@ bool ConfigureAgent ( MetaAgentDesc_t & tAgent, const CSphVariant * pAgent, cons
{
case apInHost:
{
+ if ( !*p )
+ {
+ eState = apDone;
+ break;
+ }
+
if ( sphIsAlpha(*p) || *p=='.' || *p=='-' || *p=='/' )
break;
+
if ( p==pAnchor )
{
sphWarning ( "index '%s': agent '%s': host name or path expected - SKIPPING AGENT",
@@ -20078,11 +20144,11 @@ bool ConfigureAgent ( MetaAgentDesc_t & tAgent, const CSphVariant * pAgent, cons
}
#endif
- if ( *p=='|' )
+ if ( IsAgentDelimiter ( *p ) )
{
+ eState = ( *p=='|' ? apInHost : apOptions );
pAnchor = p+1;
- eState = apInHost;
- if ( !ValidateAgentDesc ( tAgent, pAgent, szIndexName, bBlackhole ) )
+ if ( !ValidateAgentDesc ( tAgent, pAgent, szIndexName ) )
return false;
pCurrent = tAgent.NewAgent();
break;
@@ -20113,7 +20179,7 @@ bool ConfigureAgent ( MetaAgentDesc_t & tAgent, const CSphVariant * pAgent, cons
CSphString sIndexes = pAgent->strval().SubString ( pAnchor-pAgent->cstr(), p-pAnchor );
- if ( *p && *p!='|' )
+ if ( *p && !IsAgentDelimiter ( *p ) )
{
sphWarning ( "index '%s': agent '%s': index list expected near '%s' - SKIPPING AGENT",
szIndexName, pAgent->cstr(), p );
@@ -20121,36 +20187,132 @@ bool ConfigureAgent ( MetaAgentDesc_t & tAgent, const CSphVariant * pAgent, cons
}
pCurrent->m_sIndexes = sIndexes;
- if ( *p=='|' )
+ if ( IsAgentDelimiter ( *p ) )
{
+ if ( *p=='|' )
+ {
+ eState = apInHost;
+ if ( !ValidateAgentDesc ( tAgent, pAgent, szIndexName ) )
+ return false;
+ pCurrent = tAgent.NewAgent();
+ } else
+ eState = apOptions;
+
pAnchor = p+1;
- eState = apInHost;
- if ( !ValidateAgentDesc ( tAgent, pAgent, szIndexName, bBlackhole ) )
- return false;
- pCurrent = tAgent.NewAgent();
break;
+ } else
+ eState = apDone;
+ }
+ break;
+
+ case apOptions:
+ {
+ const char * sOptName = NULL;
+ const char * sOptValue = NULL;
+ bool bGotEq = false;
+ while ( *p )
+ {
+ bool bNextOpt = ( *p==',' );
+ bool bNextAgent = IsAgentDelimiter ( *p );
+ bGotEq |= ( *p=='=' );
+
+ if ( bNextOpt || bNextAgent )
+ {
+ if ( sOptName && sOptValue )
+ {
+ bool bParsed = false;
+ if ( sphStrMatchStatic ( "conn", sOptName ) )
+ {
+ if ( sphStrMatchStatic ( "pconn", sOptValue ) || sphStrMatchStatic ( "persistent", sOptValue ) )
+ {
+ tDesc.m_bPersistent = true;
+ bParsed = true;
+ }
+ } else if ( sphStrMatchStatic ( "ha_strategy", sOptName ) )
+ {
+ bParsed = ParseStrategyHA ( sOptValue, tDesc.m_eStrategy );
+ } else if ( sphStrMatchStatic ( "blackhole", sOptName ) )
+ {
+ tDesc.m_bBlackhole = ( atoi ( sOptValue )!=0 );
+ bParsed = true;
+ }
+
+ if ( !bParsed )
+ {
+ CSphString sInvalid;
+ sInvalid.SetBinary ( sOptName, p-sOptName );
+ sphWarning ( "index '%s': agent '%s': unknown agent option '%s' ", szIndexName, pAgent->cstr(), sInvalid.cstr() );
+ }
+ }
+
+ sOptName = sOptValue = NULL;
+ bGotEq = false;
+ if ( bNextAgent )
+ break;
+ }
+
+ if ( sphIsAlpha ( *p ) )
+ {
+ if ( !sOptName )
+ sOptName = p;
+ else if ( bGotEq && !sOptValue )
+ sOptValue = p;
+ }
+
+ p++;
}
- eState = apDone;
+
+ if ( IsAgentDelimiter ( *p ) )
+ {
+ eState = apInHost;
+ pAnchor = p+1;
+ } else
+ eState = apDone;
}
+ break;
+
case apDone:
default:
break;
} // switch (eState)
p++;
} // while (eState!=apDone)
- bool bRes = ValidateAgentDesc ( tAgent, pAgent, szIndexName, bBlackhole );
+
+ bool bRes = ValidateAgentDesc ( tAgent, pAgent, szIndexName );
tAgent.QueuePings();
- if ( bPersistent )
+ if ( tDesc.m_bPersistent )
tAgent.SetPersistent();
+ if ( tDesc.m_bBlackhole )
+ tAgent.SetBlackhole();
+ tAgent.SetStrategy ( tDesc.m_eStrategy );
+
return bRes;
}
+#undef sphStrMatchStatic
+
static void ConfigureDistributedIndex ( DistributedIndex_t * pIdx, const char * szIndexName, const CSphConfigSection & hIndex )
{
assert ( hIndex("type") && hIndex["type"]=="distributed" );
assert ( pIdx!=NULL );
- DistributedIndex_t& tIdx = *pIdx;
+ DistributedIndex_t & tIdx = *pIdx;
+
+ bool bSetHA = false;
+ // configure ha_strategy
+ if ( hIndex("ha_strategy") )
+ {
+ bSetHA = ParseStrategyHA ( hIndex["ha_strategy"].cstr(), tIdx.m_eHaStrategy );
+ if ( !bSetHA )
+ sphWarning ( "index '%s': ha_strategy (%s) is unknown for me, will use random", szIndexName, hIndex["ha_strategy"].cstr() );
+ }
+
+ bool bEnablePersistentConns = ( g_eWorkers==MPM_THREADS && g_iPersistentPoolSize );
+ if ( hIndex ( "agent_persistent" ) && !bEnablePersistentConns )
+ {
+ sphWarning ( "index '%s': agent_persistent used, but no persistent_connections_limit defined. Fall back to non-persistent agent", szIndexName );
+ bEnablePersistentConns = false;
+ }
// add local agents
CSphVector dLocs;
@@ -20169,40 +20331,35 @@ static void ConfigureDistributedIndex ( DistributedIndex_t * pIdx, const char *
}
}
- bool bHaveHA = false;
+ AgentOptions_t tAgentOptions;
+ tAgentOptions.m_bBlackhole = false;
+ tAgentOptions.m_bPersistent = false;
+ tAgentOptions.m_eStrategy = tIdx.m_eHaStrategy;
// add remote agents
for ( CSphVariant * pAgent = hIndex("agent"); pAgent; pAgent = pAgent->m_pNext )
{
MetaAgentDesc_t& tAgent = tIdx.m_dAgents.Add();
- if ( ConfigureAgent ( tAgent, pAgent, szIndexName, false ) )
- bHaveHA |= tAgent.IsHA();
- else
+ if ( !ConfigureAgent ( tAgent, pAgent, szIndexName, tAgentOptions ) )
tIdx.m_dAgents.Pop();
}
// for now work with client persistent connections only on per-thread basis,
// to avoid locks, etc.
- bool bEnablePersistentConns = g_eWorkers==MPM_THREADS;
+ tAgentOptions.m_bBlackhole = false;
+ tAgentOptions.m_bPersistent = bEnablePersistentConns;
for ( CSphVariant * pAgent = hIndex("agent_persistent"); pAgent; pAgent = pAgent->m_pNext )
{
MetaAgentDesc_t& tAgent = tIdx.m_dAgents.Add ();
- if ( !g_iPersistentPoolSize )
- {
- sphWarning ( "index '%s': agent_persistent used, but no persistent_connections_limit defined. Fall back to non-persistent agent", szIndexName );
- bEnablePersistentConns = false;
- }
- if ( ConfigureAgent ( tAgent, pAgent, szIndexName, false, bEnablePersistentConns ) )
- bHaveHA |= tAgent.IsHA();
- else
+ if ( !ConfigureAgent ( tAgent, pAgent, szIndexName, tAgentOptions ) )
tIdx.m_dAgents.Pop();
}
+ tAgentOptions.m_bBlackhole = true;
+ tAgentOptions.m_bPersistent = false;
for ( CSphVariant * pAgent = hIndex("agent_blackhole"); pAgent; pAgent = pAgent->m_pNext )
{
MetaAgentDesc_t& tAgent = tIdx.m_dAgents.Add ();
- if ( ConfigureAgent ( tAgent, pAgent, szIndexName, true ) )
- bHaveHA |= tAgent.IsHA();
- else
+ if ( !ConfigureAgent ( tAgent, pAgent, szIndexName, tAgentOptions ) )
tIdx.m_dAgents.Pop();
}
@@ -20225,24 +20382,12 @@ static void ConfigureDistributedIndex ( DistributedIndex_t * pIdx, const char *
tIdx.m_iAgentQueryTimeout = hIndex["agent_query_timeout"].intval();
}
+ bool bHaveHA = ARRAY_ANY ( bHaveHA, tIdx.m_dAgents, tIdx.m_dAgents[_any].IsHA() );
+
// configure ha_strategy
- if ( hIndex("ha_strategy") )
- {
- if ( !bHaveHA )
- sphWarning ( "index '%s': ha_strategy defined, but no ha agents in the index", szIndexName );
-
- tIdx.m_eHaStrategy = HA_RANDOM;
- if ( hIndex["ha_strategy"]=="random" )
- tIdx.m_eHaStrategy = HA_RANDOM;
- else if ( hIndex["ha_strategy"]=="roundrobin" )
- tIdx.m_eHaStrategy = HA_ROUNDROBIN;
- else if ( hIndex["ha_strategy"]=="nodeads" )
- tIdx.m_eHaStrategy = HA_AVOIDDEAD;
- else if ( hIndex["ha_strategy"]=="noerrors" )
- tIdx.m_eHaStrategy = HA_AVOIDERRORS;
- else
- sphWarning ( "index '%s': ha_strategy (%s) is unknown for me, will use random", szIndexName, hIndex["ha_strategy"].cstr() );
- }
+ if ( bSetHA && !bHaveHA )
+ sphWarning ( "index '%s': ha_strategy defined, but no ha agents in the index", szIndexName );
+
tIdx.ShareHACounters();
}
@@ -20273,7 +20418,7 @@ void FreeAgentStats ( DistributedIndex_t & tIndex )
g_tStatsMutex.Unlock();
}
-void PreCreateTemplateIndex ( ServedDesc_t & tServed, const CSphConfigSection & hIndex )
+void PreCreateTemplateIndex ( ServedDesc_t & tServed, const CSphConfigSection & )
{
tServed.m_pIndex = sphCreateIndexTemplate ( );
tServed.m_pIndex->m_bExpandKeywords = tServed.m_bExpand;
From 642994fb27c54358f834f7ab2cacf6492ebccf73 Mon Sep 17 00:00:00 2001
From: shodan
Date: Thu, 19 Feb 2015 17:05:12 +0000
Subject: [PATCH 06/73] added --with-assert configure option (fast builds but
with debug checks)
---
config/config.h.in | 7 ---
configure | 93 ++++++++++------------------------------
configure.ac | 18 ++++++--
libstemmer_c/Makefile.in | 2 +-
4 files changed, 38 insertions(+), 82 deletions(-)
diff --git a/config/config.h.in b/config/config.h.in
index d9847224..b6a73aaa 100644
--- a/config/config.h.in
+++ b/config/config.h.in
@@ -109,10 +109,6 @@
/* Define to 1 if you have the `pthread_mutex_timedlock' function. */
#undef HAVE_PTHREAD_MUTEX_TIMEDLOCK
-/* Define to 1 if your system has a GNU libc compatible `realloc' function,
- and to 0 otherwise. */
-#undef HAVE_REALLOC
-
/* Define to 1 if you have the `select' function. */
#undef HAVE_SELECT
@@ -331,9 +327,6 @@
/* Define to `int' if does not define. */
#undef pid_t
-/* Define to rpl_realloc if the replacement function should be used. */
-#undef realloc
-
/* Define to `unsigned int' if does not define. */
#undef size_t
diff --git a/configure b/configure
index c7f490e6..5ece5fcf 100755
--- a/configure
+++ b/configure
@@ -726,6 +726,7 @@ ac_user_opts='
enable_option_checking
enable_maintainer_mode
with_debug
+with_assert
enable_dependency_tracking
enable_dl
with_mysql
@@ -1388,6 +1389,8 @@ Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-debug compile slower debug version (default is disabled)
+ --with-assert compile optimized build but with debugging
+ assertions (default is disabled)
--with-mysql compile with MySQL support (default is enabled)
--with-static-mysql link statically with MySQL library (default is no)
--with-mysql-includes path to MySQL header files
@@ -2918,6 +2921,16 @@ else
fi
+
+# Check whether --with-assert was given.
+if test "${with_assert+set}" = set; then :
+ withval=$with_assert; ac_cv_use_assert=$withval
+else
+ ac_cv_use_assert=no
+
+fi
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile debug version" >&5
$as_echo_n "checking whether to compile debug version... " >&6; }
if test x$ac_cv_use_debug != xno; then
@@ -2926,10 +2939,17 @@ if test x$ac_cv_use_debug != xno; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
- SPHINX_CFLAGS="-fno-rtti -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG"
- SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64 -DNDEBUG"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ if test x$ac_cv_use_assert != xno; then
+ SPHINX_CFLAGS="-fno-rtti -Wall -g -D_FILE_OFFSET_BITS=64 -O2"
+ SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: asserts only" >&5
+$as_echo "asserts only" >&6; }
+ else
+ SPHINX_CFLAGS="-fno-rtti -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG"
+ SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64 -DNDEBUG"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
+ fi
fi
if test x$ac_env_CFLAGS_set != xset; then
@@ -5536,73 +5556,6 @@ $as_echo "#define malloc rpl_malloc" >>confdefs.h
fi
-for ac_header in stdlib.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STDLIB_H 1
-_ACEOF
-
-fi
-
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5
-$as_echo_n "checking for GNU libc compatible realloc... " >&6; }
-if ${ac_cv_func_realloc_0_nonnull+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_realloc_0_nonnull=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include
-#else
-char *realloc ();
-#endif
-
-int
-main ()
-{
-return ! realloc (0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_realloc_0_nonnull=yes
-else
- ac_cv_func_realloc_0_nonnull=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5
-$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; }
-if test $ac_cv_func_realloc_0_nonnull = yes; then :
-
-$as_echo "#define HAVE_REALLOC 1" >>confdefs.h
-
-else
- $as_echo "#define HAVE_REALLOC 0" >>confdefs.h
-
- case " $LIBOBJS " in
- *" realloc.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS realloc.$ac_objext"
- ;;
-esac
-
-
-$as_echo "#define realloc rpl_realloc" >>confdefs.h
-
-fi
-
-
for ac_header in sys/select.h sys/socket.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
diff --git a/configure.ac b/configure.ac
index 537ef6ae..96fa3b41 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,15 +26,26 @@ AC_ARG_WITH([debug],
[ac_cv_use_debug=$withval], [ac_cv_use_debug=no]
)
+AC_ARG_WITH([assert],
+ AC_HELP_STRING([--with-assert], [compile optimized build but with debugging assertions (default is disabled)]),
+ [ac_cv_use_assert=$withval], [ac_cv_use_assert=no]
+)
+
AC_MSG_CHECKING([whether to compile debug version])
if test x$ac_cv_use_debug != xno; then
SPHINX_CFLAGS="-fno-rtti -Wall -g -D_FILE_OFFSET_BITS=64"
SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64"
AC_MSG_RESULT([yes])
else
- SPHINX_CFLAGS="-fno-rtti -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG"
- SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64 -DNDEBUG"
- AC_MSG_RESULT([no])
+ if test x$ac_cv_use_assert != xno; then
+ SPHINX_CFLAGS="-fno-rtti -Wall -g -D_FILE_OFFSET_BITS=64 -O2"
+ SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64"
+ AC_MSG_RESULT([asserts only])
+ else
+ SPHINX_CFLAGS="-fno-rtti -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG"
+ SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64 -DNDEBUG"
+ AC_MSG_RESULT([no])
+ fi
fi
dnl set flags for C compiler if there are no user overrides
@@ -104,7 +115,6 @@ SPHINX_CONFIGURE_PART([checking for library functions])
# Checks for library functions.
AC_FUNC_FORK
AC_FUNC_MALLOC
-AC_FUNC_REALLOC
AC_FUNC_SELECT_ARGTYPES
AC_TYPE_SIGNAL
AC_FUNC_STAT
diff --git a/libstemmer_c/Makefile.in b/libstemmer_c/Makefile.in
index dbfc8b28..a9c11169 100644
--- a/libstemmer_c/Makefile.in
+++ b/libstemmer_c/Makefile.in
@@ -380,13 +380,13 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_finnish.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_french.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_german.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_2_hungarian.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_italian.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_norwegian.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_porter.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_portuguese.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_spanish.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_swedish.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_2_hungarian.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_2_romanian.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_KOI8_R_russian.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_danish.Po@am__quote@
From cecaeee7bfb6296abdcec5f2a81388a76c08aa82 Mon Sep 17 00:00:00 2001
From: tomat
Date: Tue, 24 Feb 2015 09:40:50 +0000
Subject: [PATCH 07/73] fixed #2172 ExtConditional vs tail hits from other
nodes added regression to test 52
---
src/sphinxsearch.cpp | 10 ++++++++
test/test_052/model.bin | 2 +-
test/test_052/test.xml | 53 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 64 insertions(+), 1 deletion(-)
diff --git a/src/sphinxsearch.cpp b/src/sphinxsearch.cpp
index c3ed4240..c066aa14 100644
--- a/src/sphinxsearch.cpp
+++ b/src/sphinxsearch.cpp
@@ -2511,6 +2511,7 @@ const ExtDoc_t * ExtConditional::GetDocsChunk()
template < TermPosFilter_e T, class ExtBase >
const ExtHit_t * ExtConditional::GetHitsChunk ( const ExtDoc_t * pDocs )
{
+ const ExtDoc_t * pStart = pDocs;
if ( m_eState==COPY_DONE )
{
// this request completed in full
@@ -2520,6 +2521,11 @@ const ExtHit_t * ExtConditional::GetHitsChunk ( const ExtDoc_t * pDoc
// old request completed in full, but we have a new hits subchunk request now
// even though there were no new docs requests in the meantime!
m_eState = COPY_FILTERED;
+ if ( m_uDoneFor && m_uDoneFor!=DOCID_MAX )
+ {
+ while ( pDocs->m_uDocid!=DOCID_MAX && pDocs->m_uDocid<=m_uDoneFor )
+ pDocs++;
+ }
}
m_uDoneFor = pDocs->m_uDocid;
@@ -2604,6 +2610,10 @@ const ExtHit_t * ExtConditional::GetHitsChunk ( const ExtDoc_t * pDoc
break;
}
+ m_uDoneFor = pDocs->m_uDocid;
+ if ( m_uDoneFor==DOCID_MAX && pDocs-1>=pStart )
+ m_uDoneFor = ( pDocs-1 )->m_uDocid;
+
m_dFilteredHits[iFilteredHits].m_uDocid = DOCID_MAX;
return iFilteredHits ? m_dFilteredHits : NULL;
}
diff --git a/test/test_052/model.bin b/test/test_052/model.bin
index 2f9cc18c..3fb21b5b 100644
--- a/test/test_052/model.bin
+++ b/test/test_052/model.bin
@@ -1 +1 @@
-a:1:{i:0;a:29:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:" aaa << ccc ";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"bbb";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" aaa << bbb << ccc ";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" aaa << ccc << ddd ";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:" ccc << ddd ";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2529";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"fff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" ccc << eee << fff ";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2529";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" ccc << ddd << ggg ";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"xxx";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" ccc << ddd << xxx ";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" eee << ddd << ggg ";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"3549";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2546";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:" one << two << three ";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"2574";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1569";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:" one << three ";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"2574";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2569";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:" one << one << three ";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:4:"3569";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1574";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:" one << one << one << three ";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1574";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:35:" one << one << one << one << three ";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"4537";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:" one << two << three << four ";}i:14;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:" "a b c" << b << c << d ";}i:15;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:5:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:" "a b c" << c << d << e ";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"3602";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:6:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"g";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:" "a b c" << e << f << g ";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"4540";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:5:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" a << "b c d" << e ";}i:18;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:6:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:" "a b c d" << "d e f" ";}i:19;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"4616";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:7:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"g";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:" "a b c d" << "e f g" ";}i:20;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"1594";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"1521";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:4:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:34:" (ccc | "ddd eee") << (ddd | ggg) ";}i:21;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:" ccc << ddd$ ";}i:22;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"2546";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:" ^one << two << three$ ";}i:23;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"5546";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:36:" ^one << "one one" << two << three$ ";}i:24;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1568";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"bbb";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:" "zzz aaa"/1 << bbb ";}i:25;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:" "zzz aaa"/1 << ddd ";}i:26;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"3500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:5:{s:2:"h1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h4";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h5";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:72:" ("h1 h2" NEAR/5 ( h3 | h4 | h5) ) << ("h1 h2" NEAR/5 ( h3 | h4 | h5) ) ";}i:27;a:3:{s:8:"sphinxql";s:87:" select * from test2 where match ( ' hi | ( vi << mi )' ) and id in ( 10, 11, 12, 15 ) ";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:2:"id";s:2:"10";}i:1;a:1:{s:2:"id";s:2:"11";}}}i:28;a:3:{s:8:"sphinxql";s:66:" select * from test3 where match ( '"New York, New York 10451"' ) ";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:2:"id";s:2:"16";}}}}}
\ No newline at end of file
+a:1:{i:0;a:30:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:3:"idd";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:" aaa << ccc ";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:3:"idd";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"bbb";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" aaa << bbb << ccc ";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:3:"idd";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" aaa << ccc << ddd ";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:" ccc << ddd ";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2529";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"fff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" ccc << eee << fff ";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2529";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" ccc << ddd << ggg ";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:3:"idd";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"xxx";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" ccc << ddd << xxx ";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:3:"idd";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" eee << ddd << ggg ";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"3549";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2546";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.004";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:" one << two << three ";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"2574";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1569";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:" one << three ";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"2574";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2569";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.004";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:" one << one << three ";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:4:"3569";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1574";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.004";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:" one << one << one << three ";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1574";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.006";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:35:" one << one << one << one << three ";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"4537";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.004";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:" one << two << three << four ";}i:14;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:3:"idd";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.005";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:" "a b c" << b << c << d ";}i:15;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:3:"idd";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.005";s:5:"words";a:5:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:" "a b c" << c << d << e ";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"3602";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:5:"words";a:6:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"g";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:" "a b c" << e << f << g ";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"4540";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:5:"words";a:5:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" a << "b c d" << e ";}i:18;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:3:"idd";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.006";s:5:"words";a:6:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:" "a b c d" << "d e f" ";}i:19;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"4616";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.006";s:5:"words";a:7:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"g";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:" "a b c d" << "e f g" ";}i:20;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"1594";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"1521";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.004";s:5:"words";a:4:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:34:" (ccc | "ddd eee") << (ddd | ggg) ";}i:21;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:2:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:" ccc << ddd$ ";}i:22;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"2546";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.004";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:" ^one << two << three$ ";}i:23;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"5546";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.006";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:36:" ^one << "one one" << two << three$ ";}i:24;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1568";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"bbb";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:" "zzz aaa"/1 << bbb ";}i:25;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:3:"idd";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:" "zzz aaa"/1 << ddd ";}i:26;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"3500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:5:{s:2:"h1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h4";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h5";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:72:" ("h1 h2" NEAR/5 ( h3 | h4 | h5) ) << ("h1 h2" NEAR/5 ( h3 | h4 | h5) ) ";}i:27;a:3:{s:8:"sphinxql";s:87:" select * from test2 where match ( ' hi | ( vi << mi )' ) and id in ( 10, 11, 12, 15 ) ";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:2:"id";s:2:"10";}i:1;a:1:{s:2:"id";s:2:"11";}}}i:28;a:3:{s:8:"sphinxql";s:66:" select * from test3 where match ( '"New York, New York 10451"' ) ";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:2:"id";s:2:"16";}}}i:29;a:3:{s:8:"sphinxql";s:55:" select * from test4 where match ( ' "m1 m2 m3$"/2 ' ) ";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:2:"id";s:4:"5399";}i:1;a:1:{s:2:"id";s:4:"6036";}}}}}
\ No newline at end of file
diff --git a/test/test_052/test.xml b/test/test_052/test.xml
index b1732ea8..7338b3b7 100644
--- a/test/test_052/test.xml
+++ b/test/test_052/test.xml
@@ -65,6 +65,57 @@ index test3
path = /test3
}
+source test4
+{
+ type = mysql
+
+ sql_query = /*term 0x1 getdocs (4)*/ \
+SELECT CAST(0x1281 AS UNSIGNED) id, 'as1 my1 m1 fe1' title, 11 idd UNION SELECT CAST(0x389c AS UNSIGNED) id, 'as1 my1 m1 fe1' title, 11 idd UNION \
+SELECT CAST(0x1b153 AS UNSIGNED) id, 'as1 my1 m1 fe1' title, 11 idd UNION SELECT CAST(0x1e8fc AS UNSIGNED) id, 'as1 my1 m1 fe1' title, 11 idd UNION \
+/*term 0x2 getdocs (511)*/ \
+SELECT CAST(0x1a6 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1b3 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1bf AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x219 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x28c AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x309 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x31b AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x337 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x498 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x4c0 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x4e8 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x568 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x58d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x60b AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x77e AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x7df AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x7e0 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x7e1 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x851 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x889 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x88a AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x8e4 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x8f0 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x954 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0xa21 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xa22 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xa4c AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xad5 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0xad6 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xbbc AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xc07 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xc4c AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0xc4d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xc9d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xcb8 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xcea AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0xcf3 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xd1d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xd21 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xd5f AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0xded AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xe28 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xe74 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xe78 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0xe79 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xe92 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xee2 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xefa AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0xf0c AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xfbc AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0xfda AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1038 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x105d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x10f0 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x110b AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1121 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x116c AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x116d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x11e2 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x11e4 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x11fa AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x11fc AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1209 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x120f AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x1219 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x122f AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1235 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x125c AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x1270 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1289 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x12ae AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x12db AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x12fd AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1314 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1376 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1377 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x13d9 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x13de AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x13e9 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x141d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x1424 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x143d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x144f AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x14c2 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x14c4 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x14c7 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x14e6 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x1517 AS UNSIGNED) id, 't2 e2 m2 m3' title, 11 idd UNION \
+SELECT CAST(0x1520 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x155f AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1571 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x15c9 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x15fe AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x161b AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x163d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1663 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x1694 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x16cb AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x16ed AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1747 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x177d AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x1794 AS UNSIGNED) id, 't2 e2 m2 m3' title, 11 idd UNION \
+SELECT CAST(0x1799 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1818 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1835 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x183a AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x1857 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1867 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x18ac AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x18bb AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+SELECT CAST(0x18dd AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION SELECT CAST(0x1925 AS UNSIGNED) id, 'z2 m2 x2' title, 11 idd UNION \
+/*term 0x3 getdocs (37)*/ \
+SELECT CAST(0xe9f AS UNSIGNED) id, 'fe3 he3 ze3 m3' title, 11 idd UNION SELECT CAST(0xeec AS UNSIGNED) id, 'he3 ze3 m3' title, 11 idd UNION \
+SELECT CAST(0x182f AS UNSIGNED) id, 'he3 ze3 m3' title, 11 idd UNION SELECT CAST(0x205f AS UNSIGNED) id, 'm3' title, 11 idd
+}
+
+index test4
+{
+ source = test4
+ path = /test4
+ charset_table = 0..9, a..z, A..Z->a..z
+ dict = keywords
+}
@@ -134,6 +185,8 @@ INSERT INTO test_table ( document_id, title, text ) VALUES
+
+
From ba4841a25873f47ff051169a93414f368f436e85 Mon Sep 17 00:00:00 2001
From: tomat
Date: Fri, 27 Feb 2015 09:19:26 +0000
Subject: [PATCH 08/73] fixed #2182 complex query with multi destination
wordforms added regressions to test 52
---
src/sphinx.cpp | 15 ++++++-
src/sphinx.h | 4 ++
src/sphinxint.h | 1 +
src/sphinxquery.cpp | 95 +++++++++++++++++++++++++++++++++++++++--
test/test_022/model.bin | 58 ++++++++++++++++++++++++-
test/test_022/test.xml | 76 +++++++++++++++++++++++++++++++++
6 files changed, 243 insertions(+), 6 deletions(-)
diff --git a/src/sphinx.cpp b/src/sphinx.cpp
index bfd7f872..a985ca5c 100644
--- a/src/sphinx.cpp
+++ b/src/sphinx.cpp
@@ -2440,6 +2440,7 @@ class CSphTokenizerBase : public ISphTokenizer
virtual uint64_t GetSettingsFNV () const;
virtual bool SetBlendChars ( const char * sConfig, CSphString & sError );
+ virtual bool WasTokenMultiformDestination ( bool & ) const { return false; }
public:
// lightweight clones must impose a lockdown on some methods
@@ -2652,6 +2653,7 @@ class CSphMultiformTokenizer : public CSphTokenFilter
virtual const char * GetBufferPtr () const { return m_iStartGetBufferPtr(); }
virtual void SetBufferPtr ( const char * sNewPtr );
virtual uint64_t GetSettingsFNV () const;
+ virtual bool WasTokenMultiformDestination ( bool & bHead ) const;
private:
const CSphMultiformContainer * m_pMultiWordforms;
@@ -6450,7 +6452,6 @@ BYTE * CSphMultiformTokenizer::GetToken ()
StoredToken_t & tStart = m_dStoredTokens[m_iStart];
strncpy ( (char *)tStart.m_sToken, m_pCurrentForm->m_dNormalForm[m_iOutputPending].m_sForm.cstr(), sizeof(tStart.m_sToken) );
- tStart.m_szTokenStart = tStart.m_szTokenStart;
if ( bLastForm )
tStart.m_pBufferPtr = m_szPendingBufferPtr;
@@ -6671,6 +6672,18 @@ int CSphMultiformTokenizer::SkipBlended ()
return m_iStart-iWasStart;
}
+bool CSphMultiformTokenizer::WasTokenMultiformDestination ( bool & bHead ) const
+{
+ if ( m_iOutputPending>-1 && m_pCurrentForm && m_pCurrentForm->m_dNormalForm.GetLength()>1 && m_iOutputPendingm_dNormalForm.GetLength() )
+ {
+ bHead = ( m_iOutputPending==0 );
+ return true;
+ } else
+ {
+ return false;
+ }
+}
+
/////////////////////////////////////////////////////////////////////////////
// FILTER
/////////////////////////////////////////////////////////////////////////////
diff --git a/src/sphinx.h b/src/sphinx.h
index 47533d3b..403ba26f 100644
--- a/src/sphinx.h
+++ b/src/sphinx.h
@@ -657,6 +657,10 @@ class ISphTokenizer
/// get original tokenized multiform (if any); NULL means there was none
virtual BYTE * GetTokenizedMultiform () { return NULL; }
+ /// was last token a part of multi-wordforms destination
+ /// head parameter might be useful to distinguish between sequence of different multi-wordforms
+ virtual bool WasTokenMultiformDestination ( bool & bHead ) const = 0;
+
/// check whether this token is a generated morphological guess
ESphTokenMorph GetTokenMorph() const { return m_eTokenMorph; }
diff --git a/src/sphinxint.h b/src/sphinxint.h
index eeaff137..f5da3992 100644
--- a/src/sphinxint.h
+++ b/src/sphinxint.h
@@ -1555,6 +1555,7 @@ class CSphTokenFilter : public ISphTokenizer
virtual BYTE * GetToken () { return m_pTokenizer->GetToken(); }
virtual ISphTokenizer * GetEmbeddedTokenizer () const { return m_pTokenizer; }
+ virtual bool WasTokenMultiformDestination ( bool & bHead ) const { return m_pTokenizer->WasTokenMultiformDestination ( bHead ); }
};
diff --git a/src/sphinxquery.cpp b/src/sphinxquery.cpp
index d2738271..19160e70 100644
--- a/src/sphinxquery.cpp
+++ b/src/sphinxquery.cpp
@@ -31,6 +31,13 @@
//////////////////////////////////////////////////////////////////////////
+struct MultiformNode_t
+{
+ XQNode_t * m_pNode;
+ int m_iDestStart;
+ int m_iDestCount;
+};
+
class XQParser_t
{
public:
@@ -64,6 +71,7 @@ class XQParser_t
void FixupNulls ( XQNode_t * pNode );
void DeleteNodesWOFields ( XQNode_t * pNode );
void PhraseShiftQpos ( XQNode_t * pNode );
+ void FixupDestForms ();
inline void SetFieldSpec ( const FieldMask_t& uMask, int iMaxPos )
{
@@ -135,7 +143,10 @@ class XQParser_t
CSphVector < CSphVector > m_dZoneVecs;
CSphVector m_dStateSpec;
CSphVector m_dSpecPool;
- CSphVector m_dPhraseStar;
+ CSphVector m_dPhraseStar;
+
+ CSphVector m_dDestForms;
+ CSphVector m_dMultiforms;
};
//////////////////////////////////////////////////////////////////////////
@@ -1078,12 +1089,37 @@ int XQParser_t::GetToken ( YYSTYPE * lvalp )
m_iAtomPos--;
}
- m_tPendingToken.pNode = AddKeyword ( sToken );
- m_iPendingType = TOK_KEYWORD;
+ bool bMultiDestHead = false;
+ bool bMultiDest = false;
+ // do nothing inside phrase
+ if ( !m_pTokenizer->m_bPhrase )
+ bMultiDest = m_pTokenizer->WasTokenMultiformDestination ( bMultiDestHead );
+
+ if ( bMultiDest && !bMultiDestHead )
+ {
+ assert ( m_dMultiforms.GetLength() );
+ m_dMultiforms.Last().m_iDestCount++;
+ m_dDestForms.Add ( sToken );
+ m_bWasKeyword = true;
+ } else
+ {
+ m_tPendingToken.pNode = AddKeyword ( sToken );
+ m_iPendingType = TOK_KEYWORD;
+ }
+
+ if ( bMultiDestHead )
+ {
+ MultiformNode_t & tMulti = m_dMultiforms.Add();
+ tMulti.m_pNode = m_tPendingToken.pNode;
+ tMulti.m_iDestStart = m_dDestForms.GetLength();
+ tMulti.m_iDestCount = 0;
+ }
if ( m_pTokenizer->TokenIsBlended() )
m_iAtomPos--;
- break;
+
+ if ( !bMultiDest || bMultiDestHead )
+ break;
}
if ( bWasFrontModifier && m_iPendingType!=TOK_KEYWORD )
@@ -1532,6 +1568,56 @@ static void FixupDegenerates ( XQNode_t * pNode )
FixupDegenerates ( pNode->m_dChildren[i] );
}
+void XQParser_t::FixupDestForms ()
+{
+ if ( !m_dMultiforms.GetLength() )
+ return;
+
+ CSphVector dForms;
+
+ ARRAY_FOREACH ( iNode, m_dMultiforms )
+ {
+ const MultiformNode_t & tDesc = m_dMultiforms[iNode];
+ XQNode_t * pMultiParent = tDesc.m_pNode;
+ assert ( pMultiParent->m_dWords.GetLength()==1 && pMultiParent->m_dChildren.GetLength()==0 );
+
+ XQKeyword_t tKeyword;
+ Swap ( pMultiParent->m_dWords[0], tKeyword );
+ pMultiParent->m_dWords.Reset();
+
+ // FIXME: what about whildcard?
+ bool bExact = ( tKeyword.m_sWord.Length()>1 && tKeyword.m_sWord.cstr()[0]=='=' );
+ bool bFieldEnd = tKeyword.m_bFieldEnd;
+ tKeyword.m_bFieldEnd = false;
+
+ XQNode_t * pMultiHead = new XQNode_t ( pMultiParent->m_dSpec );
+ pMultiHead->m_dWords.Add ( tKeyword );
+ m_dSpawned.Add ( pMultiHead );
+ dForms.Add ( pMultiHead );
+
+ for ( int iForm=0; iFormm_dSpec );
+ pMulti->m_dWords.Add ( tKeyword );
+ m_dSpawned.Add ( pMulti );
+ dForms.Add ( pMulti );
+ }
+
+ // move field end modifier to last word
+ dForms.Last()->m_dWords[0].m_bFieldEnd = bFieldEnd;
+
+ pMultiParent->SetOp ( SPH_QUERY_AND, dForms );
+ dForms.Resize ( 0 );
+ }
+}
+
bool XQParser_t::Parse ( XQQuery_t & tParsed, const char * sQuery, const CSphQuery * pQuery, const ISphTokenizer * pTokenizer,
const CSphSchema * pSchema, CSphDict * pDict, const CSphIndexSettings & tSettings )
@@ -1631,6 +1717,7 @@ bool XQParser_t::Parse ( XQQuery_t & tParsed, const char * sQuery, const CSphQue
return false;
}
+ FixupDestForms ();
DeleteNodesWOFields ( m_pRoot );
m_pRoot = SweepNulls ( m_pRoot );
FixupDegenerates ( m_pRoot );
diff --git a/test/test_022/model.bin b/test/test_022/model.bin
index 00a7cd01..d311fbef 100644
--- a/test/test_022/model.bin
+++ b/test/test_022/model.bin
@@ -1 +1,57 @@
-a:1:{i:0;a:16:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"wrapped";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"FOLDED";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"wrapped";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"folded";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:42:"somewhatmorelongformthatwouldoverflowshort";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"shortform";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:42:"somewhatmorelongformthatwouldoverflowshort";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:52:"sOMEwHATmORElONGfORMtHATwOULDoVERFLOWsHORTfORMbUFFER";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}i:2;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"s01e01";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"s01e01";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}i:2;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"s01e01";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:"season 1 episode 1";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"4627";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:6:"season";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}i:2;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:7:"episode";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"s02e02";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"4627";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:6:"season";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}i:2;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:7:"episode";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:"season 2 episode 2";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"4627";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:6:"season";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}i:3;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:7:"episode";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:"season 3 episode 3";}i:9;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"testone";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"test 1";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"testone";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"1 test";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"testone";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"test one";}i:12;a:2:{s:8:"sphinxql";s:47:"SELECT * FROM test_num WHERE MATCH('metallica')";s:10:"total_rows";i:0;}i:13;a:3:{s:8:"sphinxql";s:9:"SHOW META";s:10:"total_rows";i:9;s:4:"rows";a:8:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"0";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"0";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:14:"концерт";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"0";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"0";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:16:"металики";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"0";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"0";}}}i:14;a:2:{s:8:"sphinxql";s:52:"SELECT * FROM test_num WHERE MATCH('metallica 2014')";s:10:"total_rows";i:0;}i:15;a:3:{s:8:"sphinxql";s:9:"SHOW META";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"0";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"0";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:14:"концерт";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"0";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"0";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:16:"металики";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"0";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"0";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:4:"2014";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"0";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"0";}}}}}
\ No newline at end of file
+a:1:{i:0;a:65:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"wrapped";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"FOLDED";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"wrapped";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"folded";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:42:"somewhatmorelongformthatwouldoverflowshort";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"shortform";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:42:"somewhatmorelongformthatwouldoverflowshort";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:52:"sOMEwHATmORElONGfORMtHATwOULDoVERFLOWsHORTfORMbUFFER";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}i:2;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"s01e01";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"s01e01";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}i:2;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"s01e01";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:"season 1 episode 1";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"4627";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:6:"season";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}i:2;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:7:"episode";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"s02e02";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"4627";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:6:"season";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}i:2;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:7:"episode";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:"season 2 episode 2";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"4627";s:5:"attrs";a:1:{s:3:"idd";s:2:"11";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:6:"season";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}i:3;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:7:"episode";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:"season 3 episode 3";}i:9;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"testone";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"test 1";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"testone";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"1 test";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"testone";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"test one";}i:12;a:2:{s:8:"sphinxql";s:47:"SELECT * FROM test_num WHERE MATCH('metallica')";s:10:"total_rows";i:0;}i:13;a:3:{s:8:"sphinxql";s:9:"SHOW META";s:10:"total_rows";i:9;s:4:"rows";a:8:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"0";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"0";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:14:"концерт";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"0";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"0";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:16:"металики";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"0";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"0";}}}i:14;a:2:{s:8:"sphinxql";s:52:"SELECT * FROM test_num WHERE MATCH('metallica 2014')";s:10:"total_rows";i:0;}i:15;a:3:{s:8:"sphinxql";s:9:"SHOW META";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"0";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"0";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:14:"концерт";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"0";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"0";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:16:"металики";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"0";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"0";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:4:"2014";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"0";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"0";}}}i:16;a:2:{s:8:"sphinxql";s:15:"set profiling=1";s:14:"total_affected";i:0;}i:17;a:3:{s:8:"sphinxql";s:46:"SELECT * FROM multi1 WHERE MATCH('me | rdogs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:18;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:116:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dogs, querypos=3))))";}}}i:19;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:4:"dogs";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"1";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"1";}}}i:20;a:3:{s:8:"sphinxql";s:46:"SELECT * FROM multi2 WHERE MATCH('me | rdogs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}}}i:21;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:116:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dogs, querypos=3))))";}}}i:22;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:3:"dog";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"2";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"2";}}}i:23;a:3:{s:8:"sphinxql";s:45:"SELECT * FROM multi1 WHERE MATCH('me | dogs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:24;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:70:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(KEYWORD(dogs, querypos=2)))";}}}i:25;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:9;s:4:"rows";a:8:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:4:"dogs";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"1";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"1";}}}i:26;a:3:{s:8:"sphinxql";s:45:"SELECT * FROM multi2 WHERE MATCH('me | dogs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:27;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:70:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(KEYWORD(dogs, querypos=2)))";}}}i:28;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:9;s:4:"rows";a:8:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"dog";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}}}i:29;a:3:{s:8:"sphinxql";s:51:"SELECT * FROM multi1 WHERE MATCH('me | (red dogs)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:30;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:116:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dogs, querypos=3))))";}}}i:31;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:4:"dogs";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"1";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"1";}}}i:32;a:3:{s:8:"sphinxql";s:51:"SELECT * FROM multi2 WHERE MATCH('me | (red dogs)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}}}i:33;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:116:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dogs, querypos=3))))";}}}i:34;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:3:"dog";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"2";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"2";}}}i:35;a:3:{s:8:"sphinxql";s:51:"SELECT * FROM multi1 WHERE MATCH('meo | (red dog)')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:36;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:116:"OR(
+ AND(KEYWORD(meo, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dog, querypos=3))))";}}}i:37;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"meo";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"0";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"0";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:3:"dog";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"1";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"1";}}}i:38;a:3:{s:8:"sphinxql";s:51:"SELECT * FROM multi2 WHERE MATCH('meo | (red dog)')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:39;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:116:"OR(
+ AND(KEYWORD(meo, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dog, querypos=3))))";}}}i:40;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"2";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"2";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"meo";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"0";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"0";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:3:"dog";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"2";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"2";}}}i:41;a:3:{s:8:"sphinxql";s:47:"SELECT * FROM multi1 WHERE MATCH('me | =rdogs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:42;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:116:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dogs, querypos=3))))";}}}i:43;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:4:"dogs";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"1";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"1";}}}i:44;a:3:{s:8:"sphinxql";s:47:"SELECT * FROM multi2 WHERE MATCH('me | =rdogs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:45;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:118:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(=red, querypos=2)),
+ AND(KEYWORD(=dogs, querypos=3))))";}}}i:46;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:4:"=red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:5:"=dogs";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"1";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"1";}}}i:47;a:3:{s:8:"sphinxql";s:47:"SELECT * FROM multi1 WHERE MATCH('me | rdogs$')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:48;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:127:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dogs, querypos=3, field_end))))";}}}i:49;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:4:"dogs";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"1";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"1";}}}i:50;a:3:{s:8:"sphinxql";s:47:"SELECT * FROM multi2 WHERE MATCH('me | rdogs$')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}}}i:51;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:127:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dogs, querypos=3, field_end))))";}}}i:52;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:3:"dog";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"2";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"2";}}}i:53;a:3:{s:8:"sphinxql";s:48:"SELECT * FROM multi1 WHERE MATCH('me | =rdogs$')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:54;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:127:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(red, querypos=2)),
+ AND(KEYWORD(dogs, querypos=3, field_end))))";}}}i:55;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:3:"red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:4:"dogs";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"1";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"1";}}}i:56;a:3:{s:8:"sphinxql";s:48:"SELECT * FROM multi2 WHERE MATCH('me | =rdogs$')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:57;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:129:"OR(
+ AND(KEYWORD(me, querypos=1)),
+ AND(
+ AND(KEYWORD(=red, querypos=2)),
+ AND(KEYWORD(=dogs, querypos=3, field_end))))";}}}i:58;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:12;s:4:"rows";a:11:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:2:"me";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:4:"=red";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"2";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"2";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:5:"=dogs";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"1";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"1";}}}i:59;a:3:{s:8:"sphinxql";s:54:"SELECT * FROM multi1 WHERE MATCH('test | "me rdogs" ')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}}}i:60;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:126:"OR(
+ AND(KEYWORD(test, querypos=1)),
+ PHRASE(KEYWORD(me, querypos=2), KEYWORD(red, querypos=3), KEYWORD(dogs, querypos=4)))";}}}i:61;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:15;s:4:"rows";a:14:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"test";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:2:"me";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"3";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"3";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:3:"red";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"2";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"2";}i:11;a:2:{s:13:"Variable_name";s:10:"keyword[3]";s:5:"Value";s:4:"dogs";}i:12;a:2:{s:13:"Variable_name";s:7:"docs[3]";s:5:"Value";s:1:"1";}i:13;a:2:{s:13:"Variable_name";s:7:"hits[3]";s:5:"Value";s:1:"1";}}}i:62;a:3:{s:8:"sphinxql";s:54:"SELECT * FROM multi2 WHERE MATCH('test | "me rdogs" ')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"2";s:3:"idd";s:2:"11";}i:1;a:2:{s:2:"id";s:1:"3";s:3:"idd";s:2:"11";}i:2;a:2:{s:2:"id";s:1:"1";s:3:"idd";s:2:"11";}}}i:63;a:3:{s:8:"sphinxql";s:9:"show plan";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:8:"Variable";s:16:"transformed_tree";s:5:"Value";s:126:"OR(
+ AND(KEYWORD(test, querypos=1)),
+ PHRASE(KEYWORD(me, querypos=2), KEYWORD(red, querypos=3), KEYWORD(dogs, querypos=4)))";}}}i:64;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:15;s:4:"rows";a:14:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"test";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}i:5;a:2:{s:13:"Variable_name";s:10:"keyword[1]";s:5:"Value";s:2:"me";}i:6;a:2:{s:13:"Variable_name";s:7:"docs[1]";s:5:"Value";s:1:"3";}i:7;a:2:{s:13:"Variable_name";s:7:"hits[1]";s:5:"Value";s:1:"3";}i:8;a:2:{s:13:"Variable_name";s:10:"keyword[2]";s:5:"Value";s:3:"red";}i:9;a:2:{s:13:"Variable_name";s:7:"docs[2]";s:5:"Value";s:1:"2";}i:10;a:2:{s:13:"Variable_name";s:7:"hits[2]";s:5:"Value";s:1:"2";}i:11;a:2:{s:13:"Variable_name";s:10:"keyword[3]";s:5:"Value";s:3:"dog";}i:12;a:2:{s:13:"Variable_name";s:7:"docs[3]";s:5:"Value";s:1:"2";}i:13;a:2:{s:13:"Variable_name";s:7:"hits[3]";s:5:"Value";s:1:"2";}}}}}
\ No newline at end of file
diff --git a/test/test_022/test.xml b/test/test_022/test.xml
index f72419cb..94196594 100644
--- a/test/test_022/test.xml
+++ b/test/test_022/test.xml
@@ -44,6 +44,31 @@ index test_num
path = /test_num
wordforms = /wf_num.txt
}
+
+source src_multi
+{
+ type = mysql
+
+
+ sql_query = SELECT 1 id, 11 idd, 'test me rd' text UNION SELECT 2 id, 11 idd, 'test me red dogs' text UNION SELECT 3 id, 11 idd, 'test me red dog' text
+ sql_attr_uint = idd
+}
+
+index multi1
+{
+ source = src_multi
+ path = /multi1
+ wordforms = /wf_multi.txt
+}
+
+index multi2
+{
+ source = src_multi
+ path = /multi2
+ wordforms = /wf_multi.txt
+ morphology = stem_en
+ index_exact_words = 1
+}
@@ -69,6 +94,57 @@ index test_num
SHOW METASELECT * FROM test_num WHERE MATCH('metallica 2014')SHOW META
+
+
+set profiling=1
+SELECT * FROM multi1 WHERE MATCH('me | rdogs')
+show plan
+show meta
+SELECT * FROM multi2 WHERE MATCH('me | rdogs')
+show plan
+show meta
+SELECT * FROM multi1 WHERE MATCH('me | dogs')
+show plan
+show meta
+SELECT * FROM multi2 WHERE MATCH('me | dogs')
+show plan
+show meta
+SELECT * FROM multi1 WHERE MATCH('me | (red dogs)')
+show plan
+show meta
+SELECT * FROM multi2 WHERE MATCH('me | (red dogs)')
+show plan
+show meta
+SELECT * FROM multi1 WHERE MATCH('meo | (red dog)')
+show plan
+show meta
+SELECT * FROM multi2 WHERE MATCH('meo | (red dog)')
+show plan
+show meta
+SELECT * FROM multi1 WHERE MATCH('me | =rdogs')
+show plan
+show meta
+SELECT * FROM multi2 WHERE MATCH('me | =rdogs')
+show plan
+show meta
+SELECT * FROM multi1 WHERE MATCH('me | rdogs$')
+show plan
+show meta
+SELECT * FROM multi2 WHERE MATCH('me | rdogs$')
+show plan
+show meta
+SELECT * FROM multi1 WHERE MATCH('me | =rdogs$')
+show plan
+show meta
+SELECT * FROM multi2 WHERE MATCH('me | =rdogs$')
+show plan
+show meta
+SELECT * FROM multi1 WHERE MATCH('test | "me rdogs" ')
+show plan
+show meta
+SELECT * FROM multi2 WHERE MATCH('test | "me rdogs" ')
+show plan
+show meta
From 7464a3255056e99e32633cf767d7b43195645d99 Mon Sep 17 00:00:00 2001
From: tomat
Date: Fri, 27 Feb 2015 09:27:40 +0000
Subject: [PATCH 09/73] added missed wordforms to test 52
---
test/test_022/wf_multi.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 test/test_022/wf_multi.txt
diff --git a/test/test_022/wf_multi.txt b/test/test_022/wf_multi.txt
new file mode 100644
index 00000000..4c02d7a6
--- /dev/null
+++ b/test/test_022/wf_multi.txt
@@ -0,0 +1 @@
+rdogs > red dogs
\ No newline at end of file
From 0eadb40351f414eaf3087c99fe6d79db4c0c96f6 Mon Sep 17 00:00:00 2001
From: tomat
Date: Mon, 2 Mar 2015 06:41:25 +0000
Subject: [PATCH 10/73] fixed #2110 crash on snippet generation added
regressions to test 168
---
src/sphinxexcerpt.cpp | 4 +-
test/test_168/model.bin | 2 +-
test/test_168/test.xml | 31 ++++++++++++++-
test/test_168/text1.txt | 29 ++++++++++++++
test/test_168/text2.txt | 88 +++++++++++++++++++++++++++++++++++++++++
5 files changed, 151 insertions(+), 3 deletions(-)
create mode 100644 test/test_168/text1.txt
create mode 100644 test/test_168/text2.txt
diff --git a/src/sphinxexcerpt.cpp b/src/sphinxexcerpt.cpp
index fcf2f819..24466b7f 100644
--- a/src/sphinxexcerpt.cpp
+++ b/src/sphinxexcerpt.cpp
@@ -3019,7 +3019,9 @@ static void TokenizeDocument ( T & tFunctor, const CSphHTMLStripper * pStripper,
if ( pBlendedStartGetBoundary() ? pTokenizer->GetBoundaryOffset() : -1 );
+ if ( ( pBlendedStart - pLastTokenEnd )>0 )
+ bDone = !tFunctor.OnOverlap ( pLastTokenEnd-pStartPtr, pBlendedStart - pLastTokenEnd, pTokenizer->GetBoundary() ? pTokenizer->GetBoundaryOffset() : -1 );
+
tTok.m_uWordId = 0;
tTok.m_bStopWord = false;
tTok.m_uPosition = uPosition; // let's stick to 1st blended part
diff --git a/test/test_168/model.bin b/test/test_168/model.bin
index 7face690..c77a1930 100644
--- a/test/test_168/model.bin
+++ b/test/test_168/model.bin
@@ -1 +1 @@
-a:1:{i:0;a:27:{i:0;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS ('and here we go 2524460. 989561 as you said', 'idx', '=2524460.', 1 as query_mode, 4 as limit_words, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:39:" ... we go 2524460. 989561 ... ";}}}i:1;a:3:{s:8:"sphinxql";s:179:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | =dude\/buddy', 1 as query_mode, 60 as limit, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:76:" ... need here (exactly)? are dude ... know this dude/buddy.";}}}i:2;a:3:{s:8:"sphinxql";s:163:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) dude\/buddy', 0 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:114:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:3;a:3:{s:8:"sphinxql";s:165:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | dude\/buddy', 1 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:93:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:4;a:3:{s:8:"sphinxql";s:157:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) buddy', 0 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:107:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:5;a:3:{s:8:"sphinxql";s:159:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | buddy', 1 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:93:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:6;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 0 as query_mode, 3 as limit_passages, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:55:"What are you need here+ (exactly)?";}}}i:7;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:55:"What are you need here+ (exactly)?";}}}i:8;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 1 as query_mode, 3 as limit_passages, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"What are you need here+ (exactly)?";}}}i:9;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"What are you need here+ (exactly)?";}}}i:10;a:3:{s:8:"sphinxql";s:96:"CALL SNIPPETS ('abc +hashtag abc', 'idx2', '+hashtag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"abc +hashtag abc";}}}i:11;a:3:{s:8:"sphinxql";s:96:"CALL SNIPPETS ('abc +hashtag abc', 'idx2', '+hashtag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:23:"abc +hashtag abc";}}}i:12;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS ('abc +hashtag +hashtag abc', 'idx2', '+hashtag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:53:"abc +hashtag+hashtag abc";}}}i:13;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS ('abc +hashtag +hashtag abc', 'idx2', '+hashtag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:32:"abc +hashtag +hashtag abc";}}}i:14;a:3:{s:8:"sphinxql";s:101:"CALL SNIPPETS ('abc +hashtag +hashtag', 'idx2', '+hashtag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:49:"abc +hashtag+hashtag";}}}i:15;a:3:{s:8:"sphinxql";s:101:"CALL SNIPPETS ('abc +hashtag +hashtag', 'idx2', '+hashtag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:28:"abc +hashtag +hashtag";}}}i:16;a:3:{s:8:"sphinxql";s:100:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:27:"abc +hashtag+bag abc";}}}i:17;a:3:{s:8:"sphinxql";s:100:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:20:"abc +hashtag+bag abc";}}}i:18;a:3:{s:8:"sphinxql";s:104:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag+bag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"abc +hashtag+bag abc";}}}i:19;a:3:{s:8:"sphinxql";s:104:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag+bag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:27:"abc +hashtag+bag abc";}}}i:20;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag +bag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"abc +hashtag+bag abc";}}}i:21;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag +bag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:20:"abc +hashtag+bag abc";}}}i:22;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS ('hashtag+bag abc for me is not so long but who knows', 'idx2', 'hashtag+bag', 1 as query_mode, 40 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:42:"hashtag+bag abc for me is not ... ";}}}i:23;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS ('for me is not so long but who knows abc hashtag+bag', 'idx2', 'hashtag+bag', 1 as query_mode, 40 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:47:" ... long but who knows abc hashtag+bag";}}}i:24;a:3:{s:8:"sphinxql";s:176:"CALL SNIPPETS ('for me is not so long abc hashtag+bag but who knows everyone is not same abc hashtag+bag as me or someone', 'idx2', 'hashtag+bag', 1 as query_mode, 40 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:55:" ... so long abc hashtag+bag but who knows ... ";}}}i:25;a:3:{s:8:"sphinxql";s:176:"CALL SNIPPETS ('for me is not so long abc hashtag+bag but who knows everyone is not same abc hashtag+bag as me or someone', 'idx2', 'hashtag+bag', 1 as query_mode, 80 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:102:" ... not so long abc hashtag+bag but who knows ... same abc hashtag+bag as me or ... ";}}}i:26;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS ('+hashtag for me is not so long but who knows', 'idx2', '+hashtag', 1 as query_mode, 40 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:38:"+hashtag for me is not so ... ";}}}}}
\ No newline at end of file
+a:1:{i:0;a:29:{i:0;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS ('and here we go 2524460. 989561 as you said', 'idx', '=2524460.', 1 as query_mode, 4 as limit_words, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:39:" ... we go 2524460. 989561 ... ";}}}i:1;a:3:{s:8:"sphinxql";s:179:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | =dude\/buddy', 1 as query_mode, 60 as limit, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:76:" ... need here (exactly)? are dude ... know this dude/buddy.";}}}i:2;a:3:{s:8:"sphinxql";s:163:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) dude\/buddy', 0 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:114:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:3;a:3:{s:8:"sphinxql";s:165:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | dude\/buddy', 1 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:93:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:4;a:3:{s:8:"sphinxql";s:157:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) buddy', 0 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:107:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:5;a:3:{s:8:"sphinxql";s:159:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | buddy', 1 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:93:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:6;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 0 as query_mode, 3 as limit_passages, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:55:"What are you need here+ (exactly)?";}}}i:7;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:55:"What are you need here+ (exactly)?";}}}i:8;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 1 as query_mode, 3 as limit_passages, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"What are you need here+ (exactly)?";}}}i:9;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"What are you need here+ (exactly)?";}}}i:10;a:3:{s:8:"sphinxql";s:96:"CALL SNIPPETS ('abc +hashtag abc', 'idx2', '+hashtag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"abc +hashtag abc";}}}i:11;a:3:{s:8:"sphinxql";s:96:"CALL SNIPPETS ('abc +hashtag abc', 'idx2', '+hashtag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:23:"abc +hashtag abc";}}}i:12;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS ('abc +hashtag +hashtag abc', 'idx2', '+hashtag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:53:"abc +hashtag+hashtag abc";}}}i:13;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS ('abc +hashtag +hashtag abc', 'idx2', '+hashtag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:32:"abc +hashtag +hashtag abc";}}}i:14;a:3:{s:8:"sphinxql";s:101:"CALL SNIPPETS ('abc +hashtag +hashtag', 'idx2', '+hashtag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:49:"abc +hashtag+hashtag";}}}i:15;a:3:{s:8:"sphinxql";s:101:"CALL SNIPPETS ('abc +hashtag +hashtag', 'idx2', '+hashtag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:28:"abc +hashtag +hashtag";}}}i:16;a:3:{s:8:"sphinxql";s:100:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:27:"abc +hashtag+bag abc";}}}i:17;a:3:{s:8:"sphinxql";s:100:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:20:"abc +hashtag+bag abc";}}}i:18;a:3:{s:8:"sphinxql";s:104:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag+bag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"abc +hashtag+bag abc";}}}i:19;a:3:{s:8:"sphinxql";s:104:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag+bag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:27:"abc +hashtag+bag abc";}}}i:20;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag +bag', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"abc +hashtag+bag abc";}}}i:21;a:3:{s:8:"sphinxql";s:105:"CALL SNIPPETS ('abc +hashtag+bag abc', 'idx2', '+hashtag +bag', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:20:"abc +hashtag+bag abc";}}}i:22;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS ('hashtag+bag abc for me is not so long but who knows', 'idx2', 'hashtag+bag', 1 as query_mode, 40 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:42:"hashtag+bag abc for me is not ... ";}}}i:23;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS ('for me is not so long but who knows abc hashtag+bag', 'idx2', 'hashtag+bag', 1 as query_mode, 40 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:47:" ... long but who knows abc hashtag+bag";}}}i:24;a:3:{s:8:"sphinxql";s:176:"CALL SNIPPETS ('for me is not so long abc hashtag+bag but who knows everyone is not same abc hashtag+bag as me or someone', 'idx2', 'hashtag+bag', 1 as query_mode, 40 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:55:" ... so long abc hashtag+bag but who knows ... ";}}}i:25;a:3:{s:8:"sphinxql";s:176:"CALL SNIPPETS ('for me is not so long abc hashtag+bag but who knows everyone is not same abc hashtag+bag as me or someone', 'idx2', 'hashtag+bag', 1 as query_mode, 80 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:102:" ... not so long abc hashtag+bag but who knows ... same abc hashtag+bag as me or ... ";}}}i:26;a:3:{s:8:"sphinxql";s:112:"CALL SNIPPETS ('+hashtag for me is not so long but who knows', 'idx2', '+hashtag', 1 as query_mode, 40 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:38:"+hashtag for me is not so ... ";}}}i:27;a:3:{s:8:"sphinxql";s:72:"CALL SNIPPETS (('text1.txt'),'idx_blend1','mysql query',1 AS load_files)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:329:" ... per-connection encoding with MySQL; main query (see Section 12.1.12 ... is established again; post-index query (see Section 12.1.29, ... more detail here. Ranged queries Main query, which needs to ... so-called ranged queries. With ranged queries, Sphinx first fetches ... ";}}}i:28;a:3:{s:8:"sphinxql";s:79:"CALL SNIPPETS (('text2.txt'),'idx_blend2','*алгоритм*',1 AS load_files)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:429:" ... - b; b)$. Утверждение доказано. \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Теперь перейдем к описанию алгоритма Евклида для нахождения наибольшего общего ... НОД} (r_{n+1},0)=r_{n+1}$ \r\n \r\n \r\n \r\n С помощью алгоритма Евклида можно доказать следующую теорему ... ";}}}}}
\ No newline at end of file
diff --git a/test/test_168/test.xml b/test/test_168/test.xml
index 94863508..af83510f 100644
--- a/test/test_168/test.xml
+++ b/test/test_168/test.xml
@@ -12,6 +12,7 @@ indexer
searchd
{
+ snippets_file_prefix = /
}
source src
@@ -41,6 +42,33 @@ index idx2
blend_mode = trim_none, trim_head, trim_tail, trim_both, skip_pure
}
+index idx_blend1
+{
+ type =template
+ html_strip = 1
+ min_word_len = 2
+ min_infix_len = 3
+ index_sp = 1
+ dict = keywords
+ morphology = stem_en,stem_ru
+ blend_chars = .
+ blend_mode = trim_both
+}
+
+index idx_blend2
+{
+ type = template
+ min_word_len = 2
+ charset_type = utf-8
+ charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+0401->U+0435, U+0451->U+0435, U+A8->U+E5, U+B8->U+E5
+ ignore_chars = U+AD
+ min_prefix_len = 2
+ blend_chars = +, U+23
+ html_strip = 1
+ index_exact_words = 1
+ morphology = stem_ru
+}
+
@@ -78,7 +106,8 @@ index idx2
CALL SNIPPETS ('for me is not so long abc hashtag+bag but who knows everyone is not same abc hashtag+bag as me or someone', 'idx2', 'hashtag+bag', 1 as query_mode, 80 as limit)CALL SNIPPETS ('+hashtag for me is not so long but who knows', 'idx2', '+hashtag', 1 as query_mode, 40 as limit)
-
+CALL SNIPPETS (('text1.txt'),'idx_blend1','mysql query',1 AS load_files)
+CALL SNIPPETS (('text2.txt'),'idx_blend2','*алгоритм*',1 AS load_files)
diff --git a/test/test_168/text1.txt b/test/test_168/text1.txt
new file mode 100644
index 00000000..68ca4926
--- /dev/null
+++ b/test/test_168/text1.txt
@@ -0,0 +1,29 @@
+or ask around on community forum for advice.
+ ','
3.8. SQL data sources (MySQL, PostgreSQL)
+
With all the SQL drivers, indexing generally works as follows.
connection to the database
+is established;
pre-query (see Section 12.1.11, “sql_query_pre”)
+is executed to perform any necessary initial setup, such as setting per-connection
+encoding with MySQL;
Most options, such as database user/host/password,
+ are straightforward. However, there are a few subtle things, which are discussed
+in more detail here.
Ranged queries
+Main query, which needs to fetch all the documents, can impose a read lock on the
+whole table and stall the concurrent queries (eg. INSERTs to MyISAM table), waste
+a lot of memory for result set, etc. To avoid this, Sphinx supports so-called ranged queries. With ranged queries, Sphinx first fetches
+min and max document IDs from the table, and then substitutes different ID intervals
+into main query text and runs the modified query to fetch another chunk of documents.
\ No newline at end of file
diff --git a/test/test_168/text2.txt b/test/test_168/text2.txt
new file mode 100644
index 00000000..aea1ffd7
--- /dev/null
+++ b/test/test_168/text2.txt
@@ -0,0 +1,88 @@
+Алгоритм Евклида
\r\n
Утверждение
\r\n
\r\n
Для любых двух натуральных чисел $a
+> b$ верно следующее равенство: $\\mbox{НОД} (a; b) =
+\\mbox{НОД} (a - b; b)$.
\r\n
\r\n
ДОКАЗАТЕЛЬСТВО
\r\n
\r\n
$n=\\mbox{НОД} (a; b)$ -- наибольший
+среди всех общих делителей чисел $a$ и $b$, тогда
+$a\\;\\vdots\\;n$ и $b\\;\\vdots\\;n$. Отсюда $a-b\\;\\vdots\\; n$, значит,
+ $n$ -- делитель $a-b$ и $b$, он не превосходит наибольшего
+из всех общих делителей чисел $a-b$ и $b$, т.е. $n\\leqslant
+m=\\textrm{НОД}(a; b)$. Аналогично, рассуждая получаем,
+ что $a-b\\;\\vdots\\; m$ и $b\\;\\vdots\\; m=\\textrm{НОД}(a; b)$. Отсюда
+$a=(a-b)+b \\;\\vdots\\; m$, значит, $m$ -- делитель $a$ и $b$,
+ он не превосходит наибольшего и всех общих делителей
+чисел $a$ и $b$, т.е. $m\\leqslant n=\\textrm{НОД}(a; b)$. Таким образом
+получаем $m\\leqslant n\\leqslant m$, т.е. $\\mbox{НОД} (a; b) =n=m=
+\\mbox{НОД} (a - b; b)$. Утверждение доказано.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Теперь перейдем к описанию алгоритма
+Евклида для нахождения наибольшего общего
+делителя двух чисел.
\r\n
Пусть $a\\geqslant b$,
+ тогда мы можем поделить $a$ на $b$ cостатком $a=kb+r_1$,
+ где $0\\leqslant r_1\\leqslant b-1$. Тогда, пользуясь утверждением,
+ мы получаем: $$\\textrm{НОД}(a; b)=\\textrm{НОД}(a-b; b)=\\textrm{НОД}(a-2b;b)=\\dots=\\textrm{НОД}(a-kb;
+b)=\\textrm{НОД}(r_1; b)$$ Если оказалось, что $r_1=0$, то $\\textrm{НОД}(a;b)=\\textrm{НОД}(0;
+b)=b$. Если же $r_1>0$, тогда мы вновь делим $b$ c остатком
+на $r_1$: $b=k_1r_1+r_2$, где $0\\leqslant r_2\\leqslant r_1-1$. Тогда
+вновь мы получаем, что $$\\textrm{НОД}(r_1; b)=\\textrm{НОД}(r_1;
+b-k_1r_1)=\\textrm{НОД}(r_1; r_2).$$ Если $r_2=0$, то $$\\textrm{НОД}(a;
+b)=\\textrm{НОД}(r_1; b)= \\textrm{НОД}(r_1; r_2)= \\textrm{НОД}(r_1; 0)=r_1.$$
+Если же $r_2\\ne0$, то мы продолжаем действовать аналогично.
+В итоге однажды мы получим $0$ в качестве одного
+из остатков, т.к. остатки постоянно уменьшаются,
+ а уменьшаться бесконечно они не могут (это целые
+неотрицательные числа).
\r\n
Обычно
+поиск НОД с помощью алгоритма Евклида схематично записывают
+следующим образом:
\r\n
\r\n\r\n
\r\n
$a=kb+r_1$, где $0<r_1\\leqslant b-1$
\r\n
$\\textrm{НОД}(a;
+b)=\\textrm{НОД}(b; r_1)$
\r\n
\r\n
\r\n
$b=k_1r_1+r_2$, где
+$0<r_2\\leqslant r_1-1$
\r\n
$\\textrm{НОД}(r_1; b)=\\textrm{НОД}(r_1;
+r_2)$
\r\n
\r\n
\r\n
$r_1=k_2r_2+r_3$, где $0<r_3\\leqslant
+r_2-1$
\r\n
$\\textrm{НОД}(r_1; r_2)=\\textrm{НОД}(r_2; r_3)$
\r\n
\r\n
\r\n
$\\dots$
\r\n
$\\dots$
\r\n
\r\n
\r\n
$r_{n-1}=k_nr_n+r_{n+1}$,
+ где $0<r_{n+1}\\leqslant r_n-1$
С помощью алгоритма Евклида можно
+доказать следующую теорему.
\r\n
\r\n
Теорема
\r\n
\r\n
Для
+любых натуральных $a$ и $b$ найдутся такие целые
+$x$ и $y$, что $$xa+yb=\\textrm{НОД}(a; b).$$
\r\n
\r\n
ПЛАН ДОКАЗАТЕЛЬСТВА
\r\n
\r\n
Доказательство
+данного утверждения основано на таблице, написанной
+выше для алгоритма Евклида. Оно будет проходить
+по индукции, но мы не будем формально доказывать
+это утверждение.
\r\n
Вначале заметим, что для
+$\\textrm{НОД} (r_{n-1}, r_n)=r_{n+1}=r_{n-1}-k_nr_n=x_{n-1}r_{n-1}+y_{n-1}r_n.$
+Здесь $x_{n-1}$ и $y_{n-1}$ -- целые числа. Далее мы подставляем
+в это выражение запись для $r_{n}$ через $r_{n-2}$
+и $r_{n-1}$ (в таблице эта запись не приведена,
+но можно догадаться, что она должна быть именно
+такой): $r_n=r_{n-2}-k_{n-1}r_{n-1}.$ Тогда мы несложно получаем,
+ что $$\\textrm{НОД}(r_{n-2}, r_{n-1})=\\textrm{НОД} (r_{n-1}, r_n)=r_{n+1}=$$$$=x_{n-1}r_{n-1}+y_{n-1}r_n=x_{n-1}r_{n-1}+k_n(r_{n-2}-k_{n-1}r_{n-1})=$$$$=k_nr_{n-2}+
+(x_{n-1}-k_nk_{n-1})r_{n-1}=x_{n-2}r_{n-2}+y_{n-2}r_{n-1}.$$ Здесь $x_{n-2}$
+и $y_{n-2}$ -- некоторые целые числа.
\r\n
Далее мы
+продолжаем в том же самом русле (именно здесь
+мы опускаем индукционное рассуждение): подставляем
+запись для $r_{n-1}$ через $r_{n-3}$ и $r_{n-2}$, получаем
+целые числа $x_{n-3}$ и $y_{n-3}$, потом подставляем запись
+для $r_{n-2}$ через $r_{n-4}$ и $r_{n-3}$ и т.д., в конце подставить
+запись $r_1$ через $a$ и $b$ и получаем нужные нам целые
+$x$ и $y$.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Утверждение
\r\n
\r\n
Для любых двух натуральных чисел
+$a > b$ верно с ледующее равенство: $\\mbox{НОД} (a;
+b) = \\mbox{НОД} (a - b; b)$.
\r\n
\r\n
\r\n
На этом утверждении основан простой способ
+отыскания наибольшего общего делителя двух чисел.
+Он называется алгоритм Евклида и заключается
+в следующем. Для нахождения наибольшего общего
+делителя двух чисел нужно заменить большее из
+чисел на остаток от деления его на меньшее и для
+полученной пары повторять эту процедуру, пока
+одно из чисел не станет равно нулю. Тогда второе число будет
+равно наибольшему общему делителю исходных чисел.
\ No newline at end of file
From c386b284c473e9875422a0dc1474068fa66558ec Mon Sep 17 00:00:00 2001
From: tomat
Date: Wed, 4 Mar 2015 07:43:06 +0000
Subject: [PATCH 11/73] fixed memory leak of zones at ranker destruction
---
src/sphinxsearch.cpp | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/sphinxsearch.cpp b/src/sphinxsearch.cpp
index c066aa14..80f8cf45 100644
--- a/src/sphinxsearch.cpp
+++ b/src/sphinxsearch.cpp
@@ -5576,6 +5576,15 @@ ExtRanker_c::~ExtRanker_c ()
SafeDelete ( m_dZoneStartTerm[i] );
SafeDelete ( m_dZoneEndTerm[i] );
}
+
+ ARRAY_FOREACH ( i, m_dZoneInfo )
+ {
+ ARRAY_FOREACH ( iDoc, m_dZoneInfo[i] )
+ {
+ SafeDelete ( m_dZoneInfo[i][iDoc].m_pHits );
+ }
+ m_dZoneInfo[i].Reset();
+ }
}
void ExtRanker_c::Reset ( const ISphQwordSetup & tSetup )
From af244081eeb208e6dee0c570aff5ab548e3d4604 Mon Sep 17 00:00:00 2001
From: tomat
Date: Wed, 4 Mar 2015 07:43:10 +0000
Subject: [PATCH 12/73] fixed #2178 ZONESPAN operator for hits from 3 and more
nodes added regressions to test 195 refactored ZONESPAN node, removed shared
zone vectors added debug docs and hits output to every ext-node
---
src/sphinxexpr.cpp | 11 +-
src/sphinxint.h | 2 +-
src/sphinxsearch.cpp | 424 ++++++++++++++--------------------------
src/sphinxsearch.h | 1 -
test/test_195/model.bin | 2 +-
test/test_195/test.xml | 42 +++-
6 files changed, 192 insertions(+), 290 deletions(-)
diff --git a/src/sphinxexpr.cpp b/src/sphinxexpr.cpp
index 2aa33bab..d210f6a1 100644
--- a/src/sphinxexpr.cpp
+++ b/src/sphinxexpr.cpp
@@ -197,17 +197,14 @@ struct Expr_GetStrConst_c : public ISphStringExpr
struct Expr_GetZonespanlist_c : public ISphStringExpr
{
- CSphString m_sVal;
- int m_iLen;
- CSphVector * m_pData;
+ const int * m_pData;
mutable CSphStringBuilder m_sBuilder;
explicit Expr_GetZonespanlist_c ()
- : m_iLen ( 0 )
- , m_pData ( NULL )
+ : m_pData ( NULL )
{}
- virtual int StringEval ( const CSphMatch &tMatch, const BYTE ** ppStr ) const
+ virtual int StringEval ( const CSphMatch & tMatch, const BYTE ** ppStr ) const
{
assert ( ppStr );
if ( !m_pData )
@@ -216,7 +213,7 @@ struct Expr_GetZonespanlist_c : public ISphStringExpr
return 0;
}
m_sBuilder.Clear();
- const int* pValues = &(*m_pData)[tMatch.m_iTag];
+ const int * pValues = m_pData + tMatch.m_iTag;
int iSize = *pValues++;
for ( int i=0; i<(iSize/2); ++i )
{
diff --git a/src/sphinxint.h b/src/sphinxint.h
index f5da3992..a40ce2f9 100644
--- a/src/sphinxint.h
+++ b/src/sphinxint.h
@@ -1249,7 +1249,7 @@ class ISphZoneCheck
{
public:
virtual ~ISphZoneCheck () {}
- virtual SphZoneHit_e IsInZone ( int iZone, const ExtHit_t * pHit, int * pLastSpan=0 ) = 0;
+ virtual SphZoneHit_e IsInZone ( int iZone, const ExtHit_t * pHit, int * pLastSpan ) = 0;
};
diff --git a/src/sphinxsearch.cpp b/src/sphinxsearch.cpp
index 80f8cf45..7cba12a1 100644
--- a/src/sphinxsearch.cpp
+++ b/src/sphinxsearch.cpp
@@ -128,6 +128,30 @@ static bool operator < ( SphDocID_t uDocid, const ZoneInfo_t & tZone )
return uDocid=0 && iCount=0 && iCount=0 );
- assert ( iPos
-class TermAcceptor_c : protected HitPointer
+class TermAcceptor_c
{
public:
TermAcceptor_c ( ISphQword *, const XQNode_t *, const ISphQwordSetup & ) {}
@@ -434,7 +377,7 @@ class TermAcceptor_c : protected HitPointer
};
template<>
-class TermAcceptor_c : protected HitPointer, public ISphNoncopyable
+class TermAcceptor_c : public ISphNoncopyable
{
public:
TermAcceptor_c ( ISphQword *, const XQNode_t * pNode, const ISphQwordSetup & )
@@ -448,7 +391,7 @@ class TermAcceptor_c : protected HitPointer, public ISphNo
};
template<>
-class TermAcceptor_c : protected HitPointer
+class TermAcceptor_c : public ISphNoncopyable
{
public:
TermAcceptor_c ( ISphQword *, const XQNode_t * pNode, const ISphQwordSetup & tSetup )
@@ -471,51 +414,6 @@ class TermAcceptor_c : protected HitPointer
mutable int m_iCheckFrom;
};
-
-template<>
-class TermAcceptor_c : public TermAcceptor_c
-{
-public:
- TermAcceptor_c ( ISphQword * pWord, const XQNode_t * pNode, const ISphQwordSetup & tSetup )
- : TermAcceptor_c ( pWord, pNode, tSetup)
- , m_iMyHit ( -1 )
- , m_bFinal ( false )
- , m_dMyZones ( pNode->m_dSpec.m_dZones.GetLength() )
- , m_dFinalZones ( pNode->m_dSpec.m_dZones.GetLength() )
- {}
-
-protected:
- inline bool IsAcceptableHit ( const ExtHit_t * pHit ) const;
- inline void Reset()
- {
- TermAcceptor_c::Reset();
- m_dMyZones.ResetZones();
- m_dFinalZones.ResetZones();
- }
-
- inline void SetMyHit ( int iHit, bool bFinal = false ) { m_iMyHit = iHit; m_bFinal = bFinal;}
- inline void CopyMyHit ( int iSrc, int iDst ) { m_dMyZones.CopyZVecTo ( iSrc, m_dFinalZones.GetZVec ( iDst ) ); }
-
-private:
- int m_iMyHit; ///< the current num of hit in internal buffer
- bool m_bFinal; ///< whether we point to our buffer, or temporary one for filtered zones
-protected:
- ZoneSpansHolder m_dMyZones; ///< extra buffer for filtered zones
- ZoneSpansHolder m_dFinalZones; ///< the actual buffer of the linked node
-};
-
-template<>
-class TermAcceptor_c : public TermAcceptor_c
-{
-public:
- TermAcceptor_c ( ISphQword * pWord, const XQNode_t * pNode, const ISphQwordSetup & tSetup )
- : TermAcceptor_c ( pWord, pNode, tSetup)
- {}
-
-protected:
- inline bool IsAcceptableHit ( const ExtHit_t * ) const { return true; }
-};
-
///
class BufferedNode_c
{
@@ -593,18 +491,6 @@ class ExtTermPos_c : public ExtConditional
};
-template<>
-bool ExtConditional::ExtraDataImpl ( ExtraData_e eData, void ** ppResult )
-{
- assert ( ppResult );
- if ( eData==EXTRA_GET_DATA_ZONESPANS )
- {
- *ppResult = &m_dFinalZones;
- return true;
- }
- return false;
-}
-
template
bool ExtConditional::ExtraDataImpl ( ExtraData_e, void ** )
{
@@ -672,51 +558,28 @@ class ExtAnd_c : public ExtTwofer_c
void DebugDump ( int iLevel ) { DebugDumpT ( "ExtAnd", iLevel ); }
};
-class ExtAndZonespanned : public ExtAnd_c
+class ExtAndZonespanned_c : public ExtAnd_c
{
public:
- ExtAndZonespanned () {} ///< to be used in pair with Init()
- inline void Init ( ExtNode_i * pFirst, ExtNode_i * pSecond, const ISphQwordSetup & tSetup, ZoneSpansHolder * pSpans )
- {
- ExtAnd_c::Init ( pFirst, pSecond, tSetup );
- m_pSpans = pSpans;
- m_pLastBaseHit[0] = NULL;
- m_pLastBaseHit[1] = NULL;
- if ( pFirst && !pFirst->GetExtraData ( EXTRA_GET_DATA_ZONESPANS, (void**) &m_dChildzones[0] ) )
- assert ( false );
- if ( pSecond && !pSecond->GetExtraData ( EXTRA_GET_DATA_ZONESPANS, (void**) &m_dChildzones[1] ) )
- assert ( false );
- }
virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs );
void DebugDump ( int iLevel ) { DebugDumpT ( "ExtAndZonespan", iLevel ); }
-private:
- ZoneSpansHolder * m_dChildzones[2];
- ZoneSpansHolder * m_pSpans;
- const ExtHit_t * m_pLastBaseHit[2];
+protected:
+ bool IsSameZonespan ( const ExtHit_t * pHit1, const ExtHit_t * pHit2 ) const;
-private:
- bool IsSameZonespan ( int iHit, int iProofHit ) const;
+ ISphZoneCheck * m_pZoneChecker;
+ CSphVector m_dZones;
};
-class ExtAndZonespan_c : public ExtConditional < TERM_POS_NONE, ExtAndZonespanned >
+class ExtAndZonespan_c : public ExtConditional < TERM_POS_NONE, ExtAndZonespanned_c >
{
public:
- ExtAndZonespan_c ( ExtNode_i *pFirst, ExtNode_i *pSecond, const ISphQwordSetup & tSetup, const XQNode_t * pNode )
- : ExtConditional ( NULL, pNode, tSetup )
- {
- ExtAndZonespanned::Init ( pFirst, pSecond, tSetup, &m_dMyZones );
- }
-private:
- bool ExtraDataImpl ( ExtraData_e eData, void ** ppResult )
+ ExtAndZonespan_c ( ExtNode_i * pFirst, ExtNode_i * pSecond, const ISphQwordSetup & tSetup, const XQNode_t * pNode )
+ : ExtConditional ( NULL, pNode, tSetup )
{
- assert ( ppResult );
- if ( eData==EXTRA_GET_DATA_ZONESPANS )
- {
- *ppResult = &m_dFinalZones;
- return true;
- }
- return false;
+ Init ( pFirst, pSecond, tSetup );
+ m_pZoneChecker = tSetup.m_pZoneChecker;
+ m_dZones = pNode->m_dSpec.m_dZones;
}
};
@@ -1048,7 +911,7 @@ class ExtQuorum_c : public ExtNode_i
#if QDEBUG
if ( bFixDupes && bHasDupes!=m_bHasDupes )
- printf ( "qdebug: quorum dupes %d -> %d\n", m_bHasDupes, bHasDupes );
+ printf ( "quorum dupes %d -> %d\n", m_bHasDupes, bHasDupes );
#endif
m_bHasDupes = bFixDupes ? bHasDupes : m_bHasDupes;
@@ -1186,7 +1049,7 @@ class ExtRanker_c : public ISphRanker, public ISphZoneCheck
public:
// FIXME? hide and friend?
- virtual SphZoneHit_e IsInZone ( int iZone, const ExtHit_t * pHit, int * pLastSpan=0 );
+ virtual SphZoneHit_e IsInZone ( int iZone, const ExtHit_t * pHit, int * pLastSpan );
virtual const CSphIndex * GetIndex() { return m_pIndex; }
public:
@@ -1196,6 +1059,7 @@ class ExtRanker_c : public ISphRanker, public ISphZoneCheck
int m_iMaxQpos; ///< max in-query pos among all keywords, including dupes; for ranker state functors
protected:
+ void CleanupZones ( SphDocID_t uMaxDocid );
int m_iInlineRowitems;
ExtNode_i * m_pRoot;
const ExtDoc_t * m_pDoclist;
@@ -1257,9 +1121,8 @@ class ExtRanker_T : public ExtRanker_c
{
protected:
STATE m_tState;
- ZoneSpansHolder * m_pZones;
- const ExtHit_t * m_pHitBase;
- CSphVector m_dZonespans; // zonespanlists for my matches
+ const ExtHit_t * m_pHitBase;
+ CSphFixedVector m_dZonespans; // zonespanlists for my matches
public:
ExtRanker_T ( const XQQuery_t & tXQ, const ISphQwordSetup & tSetup );
@@ -1276,7 +1139,7 @@ class ExtRanker_T : public ExtRanker_c
{
case EXTRA_GET_DATA_ZONESPANS:
assert ( ppResult );
- *ppResult = &m_dZonespans;
+ *ppResult = m_dZonespans.Begin();
return true;
default:
return m_tState.ExtraData ( eType, ppResult );
@@ -1483,7 +1346,7 @@ ExtNode_i * ExtNode_i::Create ( ISphQword * pQword, const XQNode_t * pNode, cons
pQword->m_iTermPos = TERM_POS_FIELD_LIMIT;
if ( pNode->m_dSpec.m_dZones.GetLength() )
- pQword->m_iTermPos = pNode->m_dSpec.m_bZoneSpan ? TERM_POS_ZONESPAN : TERM_POS_ZONES;
+ pQword->m_iTermPos = TERM_POS_ZONES;
if ( !pQword->m_bHasHitlist )
{
@@ -1498,7 +1361,6 @@ ExtNode_i * ExtNode_i::Create ( ISphQword * pQword, const XQNode_t * pNode, cons
case TERM_POS_FIELD_END: return new ExtTermPos_c ( pQword, pNode, tSetup );
case TERM_POS_FIELD_LIMIT: return new ExtTermPos_c ( pQword, pNode, tSetup );
case TERM_POS_ZONES: return new ExtTermPos_c ( pQword, pNode, tSetup );
- case TERM_POS_ZONESPAN: return new ExtTermPos_c ( pQword, pNode, tSetup );
default: return new ExtTerm_c ( pQword, pNode->m_dSpec.m_dFieldMask, tSetup, pNode->m_bNotWeighted );
}
}
@@ -2376,7 +2238,7 @@ inline bool TermAcceptor_c::IsAcceptableHit ( const ExtHit_t * p
// only check zones that actually match this document
for ( int i=m_iCheckFrom; iIsInZone ( m_dZones[i], pHit );
+ SphZoneHit_e eState = m_pZoneChecker->IsInZone ( m_dZones[i], pHit, NULL );
switch ( eState )
{
case SPH_ZONE_FOUND:
@@ -2392,18 +2254,6 @@ inline bool TermAcceptor_c::IsAcceptableHit ( const ExtHit_t * p
return false;
}
-inline bool TermAcceptor_c::IsAcceptableHit ( const ExtHit_t * pHit ) const
-{
- assert ( m_pZoneChecker );
- int * pZones = ( m_bFinal ? m_dFinalZones.GetZVec ( m_iMyHit ) : m_dMyZones.GetZVec ( m_iMyHit ) );
-
- bool bRes = false;
- // only check zones that actually match this document
- ARRAY_FOREACH ( i, m_dZones )
- bRes |= ( m_pZoneChecker->IsInZone ( m_dZones[i], pHit, pZones + i )==SPH_ZONE_FOUND );
- return bRes;
-}
-
template < TermPosFilter_e T, class ExtBase >
const ExtDoc_t * ExtConditional::GetDocsChunk()
{
@@ -2423,7 +2273,6 @@ const ExtDoc_t * ExtConditional::GetDocsChunk()
// filter the hits, and build the documents list
int iMyDoc = 0;
int iMyHit = 0;
- TermAcceptor_c::SetMyHit(0);
const ExtDoc_t * pDoc = m_pRawDoc; // just a shortcut
const ExtHit_t * pHit = m_pRawHit;
@@ -2473,14 +2322,12 @@ const ExtDoc_t * ExtConditional::GetDocsChunk()
// current hit is surely acceptable.
m_dMyHits[iMyHit++] = *(pHit++);
- TermAcceptor_c::SetMyHit ( iMyHit );
// copy acceptable hits for this document
while ( iMyHitm_uDocid==uLastID )
{
if ( t_Acceptor::IsAcceptableHit ( pHit ) )
{
m_dMyHits[iMyHit++] = *pHit;
- TermAcceptor_c::SetMyHit ( iMyHit );
}
pHit++;
}
@@ -2504,6 +2351,8 @@ const ExtDoc_t * ExtConditional::GetDocsChunk()
m_dMyHits[iMyHit].m_uDocid = DOCID_MAX;
m_eState = COPY_FILTERED;
+ PrintDocsChunk ( iMyDoc, ExtBase::m_iAtomPos, m_dMyDocs, "cond", this );
+
return iMyDoc ? m_dMyDocs : NULL;
}
@@ -2532,12 +2381,10 @@ const ExtHit_t * ExtConditional::GetHitsChunk ( const ExtDoc_t * pDoc
// regular case
// copy hits for requested docs from my hits to filtered hits, and return those
int iFilteredHits = 0;
- TermAcceptor_c::SetMyHit ( 0, true );
if ( m_eState==COPY_FILTERED )
{
- const ExtHit_t * pMyHits = m_dMyHits;
- const ExtHit_t * pMyHit = pMyHits;
+ const ExtHit_t * pMyHit = m_dMyHits;
for ( ;; )
{
// skip hits that the caller is not interested in
@@ -2566,7 +2413,6 @@ const ExtHit_t * ExtConditional::GetHitsChunk ( const ExtDoc_t * pDoc
// copy matching hits
while ( iFilteredHitsm_uDocid==pMyHit->m_uDocid )
{
- TermAcceptor_c::CopyMyHit ( pMyHit - pMyHits, iFilteredHits );
m_dFilteredHits[iFilteredHits++] = *pMyHit++;
}
@@ -2591,13 +2437,11 @@ const ExtHit_t * ExtConditional::GetHitsChunk ( const ExtDoc_t * pDoc
}
// copy while we can
- TermAcceptor_c::SetMyHit ( iFilteredHits, true );
while ( m_pRawHit->m_uDocid==m_uLastID && iFilteredHits::SetMyHit ( iFilteredHits, true );
}
m_pRawHit++;
}
@@ -2614,6 +2458,8 @@ const ExtHit_t * ExtConditional::GetHitsChunk ( const ExtDoc_t * pDoc
if ( m_uDoneFor==DOCID_MAX && pDocs-1>=pStart )
m_uDoneFor = ( pDocs-1 )->m_uDocid;
+ PrintHitsChunk ( iFilteredHits, ExtBase::m_iAtomPos, m_dFilteredHits, "cond", this );
+
m_dFilteredHits[iFilteredHits].m_uDocid = DOCID_MAX;
return iFilteredHits ? m_dFilteredHits : NULL;
}
@@ -2868,21 +2714,22 @@ const ExtHit_t * ExtAnd_c::GetHitsChunk ( const ExtDoc_t * pDocs )
//////////////////////////////////////////////////////////////////////////
-bool ExtAndZonespanned::IsSameZonespan ( int iLeft, int iRight ) const
+bool ExtAndZonespanned_c::IsSameZonespan ( const ExtHit_t * pHit1, const ExtHit_t * pHit2 ) const
{
- assert ( m_dChildzones[0] );
- assert ( m_dChildzones[1] );
- assert ( m_pSpans );
-
- int * pLeft = m_dChildzones[0]->GetZVec(iLeft);
- int * pRight = m_dChildzones[1]->GetZVec(iRight);
- for ( int i = 0; im_iNumZones; ++i )
- if ( pLeft[i]>=0 && pLeft[i]==pRight[i] )
- return true;
+ ARRAY_FOREACH ( i, m_dZones )
+ {
+ int iSpan1, iSpan2;
+ if ( m_pZoneChecker->IsInZone ( m_dZones[i], pHit1, &iSpan1 )==SPH_ZONE_FOUND && m_pZoneChecker->IsInZone ( m_dZones[i], pHit2, &iSpan2 )==SPH_ZONE_FOUND )
+ {
+ assert ( iSpan1>=0 && iSpan2>=0 );
+ if ( iSpan1==iSpan2 )
+ return true;
+ }
+ }
return false;
}
-const ExtHit_t * ExtAndZonespanned::GetHitsChunk ( const ExtDoc_t * pDocs )
+const ExtHit_t * ExtAndZonespanned_c::GetHitsChunk ( const ExtDoc_t * pDocs )
{
const ExtHit_t * pCur0 = m_pCurHit[0];
const ExtHit_t * pCur1 = m_pCurHit[1];
@@ -2907,24 +2754,24 @@ const ExtHit_t * ExtAndZonespanned::GetHitsChunk ( const ExtDoc_t * pDocs )
if ( ( pCur0->m_uHitpos < pCur1->m_uHitpos )
|| ( pCur0->m_uHitpos==pCur1->m_uHitpos && pCur0->m_uQuerypos>pCur1->m_uQuerypos ) )
{
- if ( IsSameZonespan ( pCur0-m_pLastBaseHit[0], pCur1-m_pLastBaseHit[1] ) )
+ if ( IsSameZonespan ( pCur0, pCur1 ) )
{
m_dHits[iHit] = *pCur0;
if ( uNodePos0!=0 )
m_dHits[iHit].m_uNodepos = uNodePos0;
- m_dChildzones[0]->CopyZVecTo ( pCur0-m_pLastBaseHit[0], m_pSpans->GetZVec ( iHit++ ) );
+ iHit++;
}
pCur0++;
if ( pCur0->m_uDocid!=m_uMatchedDocid )
break;
} else
{
- if ( IsSameZonespan ( pCur0-m_pLastBaseHit[0], pCur1-m_pLastBaseHit[1] ) )
+ if ( IsSameZonespan ( pCur0, pCur1 ) )
{
m_dHits[iHit] = *pCur1;
if ( uNodePos1!=0 )
m_dHits[iHit].m_uNodepos = uNodePos1;
- m_dChildzones[1]->CopyZVecTo ( pCur1-m_pLastBaseHit[1], m_pSpans->GetZVec ( iHit++ ) );
+ iHit++;
}
pCur1++;
if ( pCur1->m_uDocid!=m_uMatchedDocid )
@@ -2959,12 +2806,10 @@ const ExtHit_t * ExtAndZonespanned::GetHitsChunk ( const ExtDoc_t * pDocs )
if ( !pCur0 || pCur0->m_uDocid==DOCID_MAX )
{
pCur0 = m_pChildren[0]->GetHitsChunk ( pDocs );
- m_pLastBaseHit[0] = pCur0;
}
if ( !pCur1 || pCur1->m_uDocid==DOCID_MAX )
{
pCur1 = m_pChildren[1]->GetHitsChunk ( pDocs );
- m_pLastBaseHit[1] = pCur1;
}
// one of the hitlists is over
@@ -2995,9 +2840,7 @@ const ExtHit_t * ExtAndZonespanned::GetHitsChunk ( const ExtDoc_t * pDocs )
m_pCurHit[0] = pCur0;
m_pCurHit[1] = pCur1;
- assert ( iHit>=0 && iHit & dZone = m_dZoneInfo[i];
- int iSpan = FindSpan ( dZone, uMaxID );
- if ( iSpan==-1 )
- continue;
-
- if ( iSpan==dZone.GetLength()-1 )
- {
- ARRAY_FOREACH ( iDoc, dZone )
- SafeDelete ( dZone[iDoc].m_pHits );
- dZone.Resize ( 0 );
- m_dZoneMin[i] = uMaxID;
- continue;
- }
-
- for ( int iDoc=0; iDoc<=iSpan; iDoc++ )
- SafeDelete ( dZone[iDoc].m_pHits );
-
- int iLen = dZone.GetLength() - iSpan - 1;
- memmove ( dZone.Begin(), dZone.Begin()+iSpan+1, sizeof(dZone[0]) * iLen );
- dZone.Resize ( iLen );
- m_dZoneMin[i] = dZone.Begin()->m_uDocid;
- }
+ if ( !m_bZSlist )
+ CleanupZones ( uMaxID );
if ( iDocs )
{
@@ -5695,11 +5512,56 @@ const ExtDoc_t * ExtRanker_c::GetFilteredDocs ()
m_dMyDocs[iDocs].m_uDocid = DOCID_MAX;
if ( pProfile )
pProfile->Switch ( eState );
+
+ #if QDEBUG
+ CSphStringBuilder tRes;
+ tRes.Appendf ( "matched %p docs (%d) = [", this, iDocs );
+ for ( int i=0; i & dZone = m_dZoneInfo[i];
+ int iSpan = FindSpan ( dZone, uMaxDocid );
+ if ( iSpan==-1 )
+ continue;
+
+ if ( iSpan==dZone.GetLength()-1 )
+ {
+ ARRAY_FOREACH ( iDoc, dZone )
+ SafeDelete ( dZone[iDoc].m_pHits );
+ dZone.Resize ( 0 );
+ m_dZoneMin[i] = uMaxDocid;
+ continue;
+ }
+
+ for ( int iDoc=0; iDoc<=iSpan; iDoc++ )
+ SafeDelete ( dZone[iDoc].m_pHits );
+
+ int iLen = dZone.GetLength() - iSpan - 1;
+ memmove ( dZone.Begin(), dZone.Begin()+iSpan+1, sizeof(dZone[0]) * iLen );
+ dZone.Resize ( iLen );
+ m_dZoneMin[i] = dZone.Begin()->m_uDocid;
+ }
+}
+
void ExtRanker_c::SetQwordsIDF ( const ExtQwordsHash_t & hQwords )
{
@@ -6073,15 +5935,14 @@ int ExtRanker_None_c::GetMatches ()
//////////////////////////////////////////////////////////////////////////
template < typename STATE >
-ExtRanker_T::ExtRanker_T ( const XQQuery_t & tXQ, const ISphQwordSetup & tSetup ) : ExtRanker_c ( tXQ, tSetup )
+ExtRanker_T::ExtRanker_T ( const XQQuery_t & tXQ, const ISphQwordSetup & tSetup )
+ : ExtRanker_c ( tXQ, tSetup )
+ , m_dZonespans ( 0 )
{
- if ( m_bZSlist && !m_pRoot->GetExtraData ( EXTRA_GET_DATA_ZONESPANS, (void**) & m_pZones ))
- m_bZSlist = false;
+ // FIXME!!! move out the disable of m_bZSlist in case no zonespan nodes
if ( m_bZSlist )
- {
- m_dZonespans.Reserve ( ExtNode_i::MAX_DOCS );
- }
- m_dZonespans.Resize ( 1 );
+ m_dZonespans.Reset ( ExtNode_i::MAX_DOCS * m_dZones.GetLength() );
+
m_pHitBase = NULL;
}
@@ -6109,15 +5970,14 @@ int ExtRanker_T::GetMatches ()
const ExtHit_t * pHlist = m_pHitlist;
const ExtHit_t * pHitBase = m_pHitBase;
const ExtDoc_t * pDocs = m_pDoclist;
- m_dZonespans.Resize(1);
int iLastZoneData = 0;
+ int iCurZoneData = 1;
CSphVector dSpans;
if ( m_bZSlist )
{
dSpans.Resize ( m_dZones.GetLength() );
- ARRAY_FOREACH ( i, dSpans )
- dSpans[i] = -1;
+ dSpans.Fill ( -1 );
}
// warmup if necessary
@@ -6146,14 +6006,20 @@ int ExtRanker_T::GetMatches ()
m_tState.Update ( pHlist );
if ( m_bZSlist )
{
- int * pZones = m_pZones->GetZVec ( pHlist-pHitBase );
ARRAY_FOREACH ( i, m_dZones )
- if ( pZones[i]>=0 && dSpans[i]!=pZones[i] )
+ {
+ int iSpan;
+ if ( IsInZone ( i, pHlist, &iSpan )!=SPH_ZONE_FOUND )
+ continue;
+
+ if ( iSpan!=dSpans[i] && iCurZoneData+1::GetMatches ()
m_dMatches[iMatches].m_iWeight = m_tState.Finalize ( m_dMatches[iMatches] );
if ( m_bZSlist )
{
- m_dZonespans[iLastZoneData] = m_dZonespans.GetLength()-iLastZoneData-1;
+ m_dZonespans[iLastZoneData] = iCurZoneData-iLastZoneData-1;
m_dMatches[iMatches].m_iTag = iLastZoneData;
- iLastZoneData = m_dZonespans.GetLength();
- m_dZonespans.Add(0);
- ARRAY_FOREACH ( i, dSpans )
- dSpans[i] = -1;
+ iLastZoneData = iCurZoneData;
+ iCurZoneData++;
+ dSpans.Fill ( -1 );
}
iMatches++;
}
@@ -6188,6 +6053,9 @@ int ExtRanker_T::GetMatches ()
// boundary checks
if ( !pHlist )
{
+ if ( m_bZSlist && uCurDocid )
+ CleanupZones ( uCurDocid );
+
// there are no more hits for current docs block; do we have a next one?
assert ( pDocs );
pDoc = pDocs = GetFilteredDocs ();
diff --git a/src/sphinxsearch.h b/src/sphinxsearch.h
index 7cdcb669..51741391 100644
--- a/src/sphinxsearch.h
+++ b/src/sphinxsearch.h
@@ -31,7 +31,6 @@ enum TermPosFilter_e
TERM_POS_FIELD_END = 3,
TERM_POS_FIELD_STARTEND = 4,
TERM_POS_ZONES = 5,
- TERM_POS_ZONESPAN = 6
};
diff --git a/test/test_195/model.bin b/test/test_195/model.bin
index fe05e278..1102aded 100644
--- a/test/test_195/model.bin
+++ b/test/test_195/model.bin
@@ -1 +1 @@
-a:1:{i:0;a:11:{i:0;a:2:{s:8:"sphinxql";s:67:"select * from test where match('ZONESPAN:zoneC cabbages and kings')";s:10:"total_rows";i:0;}i:1;a:3:{s:8:"sphinxql";s:72:"select * from test where match('ZONESPAN:(zoneC,zoneB) kings and ships')";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:3:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:1;a:3:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:2;a:3:{s:2:"id";s:3:"204";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:3;a:3:{s:2:"id";s:3:"205";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:4;a:3:{s:2:"id";s:3:"206";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:5;a:3:{s:2:"id";s:3:"207";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:6;a:3:{s:2:"id";s:3:"208";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:7;a:3:{s:2:"id";s:3:"209";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}}}i:2;a:3:{s:8:"sphinxql";s:58:"select * from test where match('ZONESPAN:zoneC and ships')";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:3:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:1;a:3:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:2;a:3:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:3;a:3:{s:2:"id";s:3:"204";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:4;a:3:{s:2:"id";s:3:"205";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:5;a:3:{s:2:"id";s:3:"206";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:6;a:3:{s:2:"id";s:3:"207";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:7;a:3:{s:2:"id";s:3:"208";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:8;a:3:{s:2:"id";s:3:"209";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}}}i:3;a:3:{s:8:"sphinxql";s:58:"select * from test where match('ZONESPAN:zoneC kings and')";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:3:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:1;a:3:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:2;a:3:{s:2:"id";s:3:"204";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:3;a:3:{s:2:"id";s:3:"205";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:4;a:3:{s:2:"id";s:3:"206";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:5;a:3:{s:2:"id";s:3:"207";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:6;a:3:{s:2:"id";s:3:"208";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:7;a:3:{s:2:"id";s:3:"209";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:8;a:3:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}}}i:4;a:3:{s:8:"sphinxql";s:96:"select * from test where match('ZONESPAN:zoneC and kings') order by id desc OPTION max_matches=2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:1;a:3:{s:2:"id";s:3:"209";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}}}i:5;a:3:{s:8:"sphinxql";s:113:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneB,zoneC) ships cabbages') OPTION max_matches=3";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 1:1";}}}i:6;a:3:{s:8:"sphinxql";s:113:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships cabbages') OPTION max_matches=3";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 2:1";}}}i:7;a:3:{s:8:"sphinxql";s:108:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneB,zoneC) ships and') OPTION max_matches=3";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:12:" 1:1 2:1 2:2";}i:1;a:4:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 2:2";}i:2;a:4:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:8:" 2:1 2:2";}}}i:8;a:3:{s:8:"sphinxql";s:108:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships and') OPTION max_matches=3";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:12:" 1:1 2:1 1:2";}i:1;a:4:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 1:2";}i:2;a:4:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:8:" 1:1 1:2";}}}i:9;a:3:{s:8:"sphinxql";s:128:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships and') OPTION max_matches=2,sort_method=kbuffer";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:12:" 1:1 2:1 1:2";}i:1;a:4:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 1:2";}}}i:10;a:3:{s:8:"sphinxql";s:151:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships and') group by gid within group order by id desc OPTION max_matches=2";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 1:2";}}}}}
\ No newline at end of file
+a:1:{i:0;a:17:{i:0;a:2:{s:8:"sphinxql";s:67:"select * from test where match('ZONESPAN:zoneC cabbages and kings')";s:10:"total_rows";i:0;}i:1;a:3:{s:8:"sphinxql";s:72:"select * from test where match('ZONESPAN:(zoneC,zoneB) kings and ships')";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:3:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:1;a:3:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:2;a:3:{s:2:"id";s:3:"204";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:3;a:3:{s:2:"id";s:3:"205";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:4;a:3:{s:2:"id";s:3:"206";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:5;a:3:{s:2:"id";s:3:"207";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:6;a:3:{s:2:"id";s:3:"208";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:7;a:3:{s:2:"id";s:3:"209";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}}}i:2;a:3:{s:8:"sphinxql";s:58:"select * from test where match('ZONESPAN:zoneC and ships')";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:3:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:1;a:3:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:2;a:3:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:3;a:3:{s:2:"id";s:3:"204";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:4;a:3:{s:2:"id";s:3:"205";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:5;a:3:{s:2:"id";s:3:"206";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:6;a:3:{s:2:"id";s:3:"207";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:7;a:3:{s:2:"id";s:3:"208";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:8;a:3:{s:2:"id";s:3:"209";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}}}i:3;a:3:{s:8:"sphinxql";s:58:"select * from test where match('ZONESPAN:zoneC kings and')";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:3:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:1;a:3:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:2;a:3:{s:2:"id";s:3:"204";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:3;a:3:{s:2:"id";s:3:"205";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:4;a:3:{s:2:"id";s:3:"206";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:5;a:3:{s:2:"id";s:3:"207";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:6;a:3:{s:2:"id";s:3:"208";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:7;a:3:{s:2:"id";s:3:"209";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:8;a:3:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}}}i:4;a:3:{s:8:"sphinxql";s:96:"select * from test where match('ZONESPAN:zoneC and kings') order by id desc OPTION max_matches=2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}i:1;a:3:{s:2:"id";s:3:"209";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";}}}i:5;a:3:{s:8:"sphinxql";s:113:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneB,zoneC) ships cabbages') OPTION max_matches=3";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 1:1";}}}i:6;a:3:{s:8:"sphinxql";s:113:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships cabbages') OPTION max_matches=3";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 2:1";}}}i:7;a:3:{s:8:"sphinxql";s:108:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneB,zoneC) ships and') OPTION max_matches=3";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:12:" 1:1 2:1 2:2";}i:1;a:4:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 2:2";}i:2;a:4:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:8:" 2:1 2:2";}}}i:8;a:3:{s:8:"sphinxql";s:108:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships and') OPTION max_matches=3";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:12:" 1:1 2:1 1:2";}i:1;a:4:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 1:2";}i:2;a:4:{s:2:"id";s:3:"202";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:8:" 1:1 1:2";}}}i:9;a:3:{s:8:"sphinxql";s:128:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships and') OPTION max_matches=2,sort_method=kbuffer";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:3:"201";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:12:" 1:1 2:1 1:2";}i:1;a:4:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 1:2";}}}i:10;a:3:{s:8:"sphinxql";s:151:"select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships and') group by gid within group order by id desc OPTION max_matches=2";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:3:"210";s:3:"gid";s:1:"3";s:4:"sgid";s:3:"bla";s:1:"c";s:4:" 1:2";}}}i:11;a:3:{s:8:"sphinxql";s:94:"select *, zonespanlist() l from i1 where match('ZONESPAN:(h1)white wine 1987') order by id asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:9:"143770902";s:1:"l";s:302:" 1:7 1:8 1:9 1:14 1:17 1:20 1:21 1:42 1:43 1:44 1:47 1:50 1:53 1:54 1:77 1:78 1:79 1:80 1:81 1:82 1:83 1:84 1:85 1:86 1:87 1:100 1:101 1:138 1:139 1:140 1:141 1:142 1:143 1:144 1:145 1:150 1:151 1:152 1:153 1:154 1:155 1:156 1:157 1:158 1:159 1:160 1:161 1:248 1:249 1:251 1:252 1:253 1:254 1:265 1:266";}i:1;a:2:{s:2:"id";s:9:"386640504";s:1:"l";s:403:" 1:1 1:2 1:3 1:4 1:5 1:6 1:8 1:9 1:16 1:19 1:21 1:23 1:44 1:45 1:46 1:47 1:48 1:49 1:51 1:52 1:58 1:61 1:63 1:65 1:89 1:90 1:91 1:102 1:103 1:104 1:105 1:106 1:107 1:108 1:109 1:110 1:111 1:112 1:113 1:114 1:115 1:116 1:117 1:130 1:131 1:164 1:165 1:166 1:167 1:168 1:169 1:170 1:171 1:172 1:173 1:178 1:179 1:180 1:181 1:182 1:183 1:184 1:185 1:186 1:187 1:188 1:189 1:259 1:260 1:261 1:262 1:274 1:275";}i:2;a:2:{s:2:"id";s:10:"2147483647";s:1:"l";s:403:" 1:1 1:2 1:3 1:4 1:5 1:6 1:8 1:9 1:15 1:19 1:22 1:23 1:44 1:45 1:46 1:47 1:48 1:49 1:51 1:52 1:57 1:61 1:63 1:65 1:89 1:90 1:91 1:102 1:103 1:104 1:105 1:106 1:107 1:108 1:109 1:110 1:111 1:112 1:113 1:114 1:115 1:116 1:117 1:130 1:131 1:164 1:165 1:166 1:167 1:168 1:169 1:170 1:171 1:172 1:173 1:178 1:179 1:180 1:181 1:182 1:183 1:184 1:185 1:186 1:187 1:188 1:189 1:259 1:260 1:261 1:262 1:274 1:275";}}}i:12;a:3:{s:8:"sphinxql";s:94:"select *, zonespanlist() l from i1 where match('ZONESPAN:(h1)1987 white wine') order by id asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:9:"143770902";s:1:"l";s:302:" 1:7 1:8 1:9 1:14 1:17 1:20 1:21 1:42 1:43 1:44 1:47 1:50 1:53 1:54 1:77 1:78 1:79 1:80 1:81 1:82 1:83 1:84 1:85 1:86 1:87 1:100 1:101 1:138 1:139 1:140 1:141 1:142 1:143 1:144 1:145 1:150 1:151 1:152 1:153 1:154 1:155 1:156 1:157 1:158 1:159 1:160 1:161 1:248 1:249 1:251 1:252 1:253 1:254 1:265 1:266";}i:1;a:2:{s:2:"id";s:9:"386640504";s:1:"l";s:403:" 1:1 1:2 1:3 1:4 1:5 1:6 1:8 1:9 1:16 1:19 1:21 1:23 1:44 1:45 1:46 1:47 1:48 1:49 1:51 1:52 1:58 1:61 1:63 1:65 1:89 1:90 1:91 1:102 1:103 1:104 1:105 1:106 1:107 1:108 1:109 1:110 1:111 1:112 1:113 1:114 1:115 1:116 1:117 1:130 1:131 1:164 1:165 1:166 1:167 1:168 1:169 1:170 1:171 1:172 1:173 1:178 1:179 1:180 1:181 1:182 1:183 1:184 1:185 1:186 1:187 1:188 1:189 1:259 1:260 1:261 1:262 1:274 1:275";}i:2;a:2:{s:2:"id";s:10:"2147483647";s:1:"l";s:403:" 1:1 1:2 1:3 1:4 1:5 1:6 1:8 1:9 1:15 1:19 1:22 1:23 1:44 1:45 1:46 1:47 1:48 1:49 1:51 1:52 1:57 1:61 1:63 1:65 1:89 1:90 1:91 1:102 1:103 1:104 1:105 1:106 1:107 1:108 1:109 1:110 1:111 1:112 1:113 1:114 1:115 1:116 1:117 1:130 1:131 1:164 1:165 1:166 1:167 1:168 1:169 1:170 1:171 1:172 1:173 1:178 1:179 1:180 1:181 1:182 1:183 1:184 1:185 1:186 1:187 1:188 1:189 1:259 1:260 1:261 1:262 1:274 1:275";}}}i:13;a:3:{s:8:"sphinxql";s:97:"select *, zonespanlist() l from i1 where match('ZONESPAN:(h1)1987 wine white 65') order by id asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:9:"143770902";s:1:"l";s:9:" 1:8 1:43";}i:1;a:2:{s:2:"id";s:9:"386640504";s:1:"l";s:42:" 1:2 1:5 1:45 1:47 1:112 1:113 1:116 1:117";}i:2;a:2:{s:2:"id";s:10:"2147483647";s:1:"l";s:42:" 1:1 1:5 1:45 1:47 1:111 1:112 1:114 1:115";}}}i:14;a:3:{s:8:"sphinxql";s:97:"select *, zonespanlist() l from i1 where match('ZONESPAN:(h1)wine white 1987 65') order by id asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:9:"143770902";s:1:"l";s:9:" 1:8 1:43";}i:1;a:2:{s:2:"id";s:9:"386640504";s:1:"l";s:42:" 1:2 1:5 1:45 1:47 1:112 1:113 1:116 1:117";}i:2;a:2:{s:2:"id";s:10:"2147483647";s:1:"l";s:42:" 1:1 1:5 1:45 1:47 1:111 1:112 1:114 1:115";}}}i:15;a:3:{s:8:"sphinxql";s:108:"select *, zonespanlist() l from i1 where match('( ZONESPAN:(h1)1987 wine white ) NEAR/3 65') order by id asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:9:"143770902";s:1:"l";s:9:" 1:8 1:43";}i:1;a:2:{s:2:"id";s:9:"386640504";s:1:"l";s:31:" 1:2 1:5 1:45 1:112 1:113 1:116";}i:2;a:2:{s:2:"id";s:10:"2147483647";s:1:"l";s:37:" 1:1 1:5 1:45 1:111 1:112 1:114 1:115";}}}i:16;a:3:{s:8:"sphinxql";s:108:"select *, zonespanlist() l from i1 where match('( ZONESPAN:(h1)wine white 1987 ) NEAR/3 65') order by id asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:9:"143770902";s:1:"l";s:9:" 1:8 1:43";}i:1;a:2:{s:2:"id";s:9:"386640504";s:1:"l";s:31:" 1:2 1:5 1:45 1:112 1:113 1:116";}i:2;a:2:{s:2:"id";s:10:"2147483647";s:1:"l";s:37:" 1:1 1:5 1:45 1:111 1:112 1:114 1:115";}}}}}
\ No newline at end of file
diff --git a/test/test_195/test.xml b/test/test_195/test.xml
index 6aa1db59..fbac76c1 100644
--- a/test/test_195/test.xml
+++ b/test/test_195/test.xml
@@ -32,6 +32,24 @@ index test
index_zones = zone*
}
+source s1
+{
+ type = mysql
+
+
+ sql_query_pre = SET NAMES utf8
+ sql_query = SELECT id, text FROM test_zone1;
+}
+
+index i1
+{
+ source = s1
+ path = /i1
+ docinfo = extern
+
+ html_strip = 1
+ index_zones = h1
+}
@@ -53,8 +71,21 @@ create table test_table
( 207, 3, 'bla', 'Of shoes, ships and kings, and sealing wax, of cabbages, and ships. bla' ),
( 208, 3, 'bla', 'Of shoes, ships and kings, and sealing wax, of cabbages, and ships. bla' ),
( 209, 3, 'bla', 'Of shoes, ships and kings, and sealing wax, of cabbages, and ships. bla' ),
- ( 210, 3, 'bla', 'Of shoes, and kings, and sealing wax, of cabbages, and ships. bla' );]]>
-
+ ( 210, 3, 'bla', 'Of shoes, and kings, and sealing wax, of cabbages, and ships. bla' );]]>
+
+
+CREATE TABLE `test_zone1` (
+ `id` int(11) NOT NULL,
+ `text` varchar(16384) NOT NULL
+)
+
+drop table if exists test_zone1;
+wine white 1977,1978,1979,1980,1981,1982 100,
wine white 1977,1978,1979,1980,1981,1982 85
,
wine white 1977,1978,1979,1980,1981,1982 100
,
wine white 1977,1978,1979,1980,1981,1982 85
,
wine white 1977,1978,1979,1980,1981,1982 100
,
wine white 1977,1978,1979,1980,1981,1982 85
,
wine white 1984,1985,1986,1987,1988 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 96
,
wine white 1984,1985,1986 85
,
wine white 1982,1983,1984 79
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1989,1990 101
,
wine white 1985,1986 88
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1989,1990 101
,
wine white 1990 98
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1990 98
,
wine white 1990 88
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1990,1991,1992 85
,
wine white 1990,1991,1992 85
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1993,1994 102
,
wine white 1993,1994 102
,
wine white 1977,1978,1979,1980,1981,1982,1983 85
,
wine white 1977,1978,1979,1980,1981,1982,1983 100
,
wine white 1984,1985,1986,1987,1988 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 96
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1984,1985,1986 85
,
wine white 1985,1986 88
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1989,1990 101
,
wine white 1990 98
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1990 98
,
wine white 1990 88
,
wine white 1991,1992,1993,1994 85
,
wine white 1991,1992,1993,1994 74
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1990,1991,1992 85
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1993,1994 102
,
wine white 1993,1994 102
,
wine white 1990,1991,1992,1993,1994 74
,
wine white 1990,1991,1992,1993,1994 74
,
wine white 1993,1994 102
,
wine white 1993,1994 102
,
wine white 1979,1980,1981,1982 100
,
wine white 1979,1980,1981,1982 100
,
wine white 1983,1984 100
,
wine white 1983,1984 100
,
wine white 1984,1985 101
,
wine white 1984,1985 101
,
wine white 1986,1987,1988,1989,1990,1991 100
,
wine white 1986,1987,1988,1989,1990,1991 100
,
wine white 1986,1987,1988,1989,1990,1991 100
,
wine white 1986,1987,1988 83
,
wine white 1986,1987,1988 83
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990 83
,
wine white 1986,1987,1988,1989,1990 83
,
wine white 1988,1989,1990 83
,
wine white 1988,1989,1990 83
,
wine white 1990,1991 101
,
wine white 1990,1991 101
,
wine white 1990,1991 101
,
wine white 1990,1991 101
,
wine white 1988,1989,1990 83
,
wine white 1988,1989,1990 83
,
wine white 1990,1991 82
,
wine white 1990,1991 85
,
wine white 1990,1991 82
,
wine white 1990,1991 85
,
wine white 1987,1988,1989 98
,
wine white 1987,1988,1989 98
,
wine white 1991,1992,1993,1994 66
,
wine white 1991,1992,1993,1994 66
,
wine white 1991,1992,1993,1994 66
,
wine white 1991,1992,1993,1994 66
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1991,1992,1993,1994 85
,
wine white 1991,1992,1993,1994 85
,
wine white 1993,1994 79
,
wine white 1993,1994 79
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1993,1994,1995,1996 74
,
wine white 1992,1993,1994,1995,1996 66
,
wine white 1992,1993,1994,1995,1996 66
,
wine white 1992,1993,1994,1995,1996 85
,
wine white 1993,1994,1995,1996 103
,
wine white 1992,1993,1994,1995 103
,
wine white 1993,1994,1995,1996 79
,
wine white 1992,1993,1994,1995,1996 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1994,1995,1996 102
,
wine white 1984,1985,1986 82
,
wine white 1984,1985,1986 82
,
wine white 1981,1982,1983 85
,
wine white 1981,1982,1983 85
,
wine white 1990,1991 82
,
wine white 1990,1991 82
,
wine white 1993,1994 74
,
wine white 1993,1994 74
,
wine white 1991,1992,1993,1994 85
,
wine white 1991,1992,1993,1994 85
,
wine white 1986,1987 83
,
wine white 1986,1987 83
,
wine white 1984,1985,1986,1987 100
,
wine white 1984,1985,1986,1987 100
,
wine white 1985,1986,1987 88
,
wine white 1984,1985,1986,1987 100
,
wine white 1984,1985,1986,1987 100
,
wine white 1985,1986,1987 88
,
wine white 1988,1989,1990,1991 85
,
wine white 1988,1989,1990,1991 85
,
wine white 1989,1990 101
,
wine white 1989,1990 101
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1994,1995,1996,1997,1998,1999,2000 74
,
wine white 1994,1995,1996,1997,1998,1999,2000 74
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 95
,
wine white 1995,1996,1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 95
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 66
,
wine white 1995,1996,1997,1998,1999,2000 81
,
wine white 1995,1996,1997,1998,1999,2000 81
,
wine white 1995,1996,1997,1998,1999,2000 66
,
wine white 2000 85
,
wine white 1996,1997,1998,1999,2000 81
,
wine white 2000 85
,
wine white 1996,1997,1998,1999,2000 81
,
wine white 1996,1997 102
,
wine white 1996,1997 102
,
wine white 1994,1995,1996,1997,1998,1999,2000,2001 74
,
wine white 1996,1997,1998,1999,2000,2001 92
,
wine white 1995,1996,1997,1998,1999,2000,2001 85
,
wine white 1996,1997,1998,1999,2000,2001 92
,
wine white 1995,1996,1997,1998,1999,2000,2001 85
,
wine white 1996,1997,1998,1999,2000,2001 81
,
wine white 1996,1997,1998,1999,2000,2001 66
,
wine white 2000,2001 85
,
wine white 2000,2001 85
,
wine white 1996,1997,1998,1999,2000,2001 81
,
wine white 1996,1997 102
,
wine white 2000 85
,
wine white 2000 85
,
wine white 1995,1996,1997 92
,
wine white 1995,1996,1997 92
,
wine white 1994,1995,1996,1997 66
,
wine white 1994,1995,1996,1997 66
,
wine white 1994,1995,1996,1997 85
,
wine white 1994,1995,1996,1997 74
,
wine white 1994,1995,1996,1997 74
,
wine white 1995,1996 79
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996 79
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995 98
,
wine white 1994,1995 98
,
wine white 1994,1995 98
,
wine white 1994,1995 98
,
wine white 1995,1996,1997 84
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996,1997 84
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996,1997 103
,
wine white 1995,1996,1997 103
,
wine white 1994,1995,1996,1997 102
,
wine white 1994,1995,1996,1997 102
,
wine white 1995,1996,1997 92
,
wine white 1995,1996,1997 92
,
wine white 1994,1995,1996,1997 66
,
wine white 1994,1995,1996,1997 85
,
wine white 1994,1995,1996,1997 74
,
wine white 1995,1996 79
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995 98
,
wine white 1994,1995 98
,
wine white 1994,1995,1996,1997 103
,
wine white 1995,1996,1997 84
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996,1997 103
,
wine white 1994,1995,1996,1997 102
,
wine white 1995,1996,1997 92
,
wine white 1995,1996,1997 92
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 66
,
wine white 1995,1996 103
,
wine white 1993,1994,1995,1996,1997,1998 85
,
wine white 1991,1992,1993,1994 98
,
wine white 1995,1996,1997,1998,1999,2000 102
,
wine white 1986,1987 79
,
wine white 1985,1986,1987,1988 68
,
wine white 1983,1984,1985,1986 85
,
wine white 1984,1985,1986,1987,1988 100
,
wine white 1984,1985,1986,1987,1988 100
,
wine white 1987,1988 100
,
wine white 1987,1988 100
,
wine white 1989,1990,1991 82
,
wine white 1989,1990,1991,1992,1993,1994,1995,1996 85
,
wine white 1989,1990 83
,
wine white 1990 82
,
wine white 1992 101
,
wine white 1992,1993,1994,1995,1996 103
,
wine white 1988,1989,1990,1991 100
,
wine white 1988,1989,1990,1991,1992,1993,1994 100
,
wine white 1990,1991,1992,1993,1994,1995,1996 98
,
wine white 1988,1989,1990,1991,1992 100
,
wine white 1984,1985,1986,1987 89
,
wine white 1984,1985,1986,1987 100
'),
+(386640504,'
wine white 1983,1984,1985,1986,1987,1988,1989 66
,
wine white 1986,1987,1988 65
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1984,1985,1986,1987,1988 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1982,1983,1984 74
,
wine white 1986,1987 83
,
wine white 1984,1985,1986,1987 85
,
wine white 1988,1989,1990 85
,
wine white 1988,1989,1990 74
,
wine white 1982,1983,1984 100
,
wine white 1984,1985,1986 85
,
wine white 1982,1983,1984 79
,
wine white 1982,1983,1984 96
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1989,1990 101
,
wine white 1985,1986 88
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1989,1990 101
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1990 98
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1990 98
,
wine white 1990 88
,
wine white 1992,1993 87
,
wine white 1992,1993 87
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1990,1991,1992 85
,
wine white 1990,1991,1992 85
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1993,1994 102
,
wine white 1993,1994 102
,
wine white 1983,1984,1985,1986,1987,1988,1989 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1984,1985,1986,1987,1988 66
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1983,1984 74
,
wine white 1986,1987 83
,
wine white 1985,1986,1987 85
,
wine white 1988,1989,1990 85
,
wine white 1988,1989,1990 74
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 96
,
wine white 1984,1985,1986 85
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1989,1990 101
,
wine white 1985,1986 88
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1989,1990 101
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1990 98
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1990 98
,
wine white 1990 88
,
wine white 1992,1993 87
,
wine white 1991,1992,1993,1994 85
,
wine white 1991,1992,1993,1994 74
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1990,1991,1992 85
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1993,1994 102
,
wine white 1993,1994 102
,
wine white 1990,1991,1992,1993,1994 74
,
wine white 1990,1991,1992,1993,1994 74
,
wine white 1993,1994 102
,
wine white 1993,1994 102
,
wine white 1979,1980,1981,1982 100
,
wine white 1979,1980,1981,1982 100
,
wine white 1983,1984 100
,
wine white 1983,1984 100
,
wine white 1984,1985 101
,
wine white 1984,1985 101
,
wine white 1986,1987,1988,1989,1990,1991 100
,
wine white 1986,1987,1988,1989,1990,1991 100
,
wine white 1986,1987,1988,1989,1990,1991 100
,
wine white 1980,1981,1982,1983 85
,
wine white 1980,1981,1982,1983 85
,
wine white 1982,1983,1984 96
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 96
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 100
,
wine white 1990,1991 75
,
wine white 1990,1991 75
,
wine white 1986,1987,1988 83
,
wine white 1986,1987,1988 83
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990 83
,
wine white 1986,1987,1988,1989,1990 83
,
wine white 1986,1987,1988,1989,1990,1991 66
,
wine white 1986,1987,1988,1989,1990,1991 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1986,1987,1988,1989,1990,1991 66
,
wine white 1986,1987,1988,1989,1990,1991 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1988,1989,1990 83
,
wine white 1988,1989,1990 83
,
wine white 1990,1991 101
,
wine white 1990,1991 101
,
wine white 1990,1991 101
,
wine white 1990,1991 101
,
wine white 1988,1989,1990 83
,
wine white 1988,1989,1990 83
,
wine white 1990,1991 85
,
wine white 1990,1991 82
,
wine white 1990,1991 82
,
wine white 1990,1991 85
,
wine white 1987,1988,1989 98
,
wine white 1987,1988,1989 98
,
wine white 1991,1992,1993,1994 66
,
wine white 1991,1992,1993,1994 66
,
wine white 1991,1992,1993,1994 66
,
wine white 1991,1992,1993,1994 66
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1991,1992,1993,1994 85
,
wine white 1991,1992,1993,1994 85
,
wine white 1993,1994 79
,
wine white 1993,1994 79
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1993,1994,1995,1996 74
,
wine white 1992,1993,1994,1995,1996 66
,
wine white 1992,1993,1994,1995,1996 66
,
wine white 1992,1993,1994,1995,1996 85
,
wine white 1993,1994,1995,1996 103
,
wine white 1992,1993,1994,1995 103
,
wine white 1993,1994,1995,1996 79
,
wine white 1992,1993,1994,1995,1996 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1994,1995,1996 102
,
wine white 1990,1991 82
,
wine white 1990,1991 82
,
wine white 1993,1994 74
,
wine white 1993,1994 74
,
wine white 1991,1992,1993,1994 85
,
wine white 1991,1992,1993,1994 85
,
wine white 1984,1985,1986,1987 85
,
wine white 1986,1987 83
,
wine white 1986,1987 83
,
wine white 1984,1985,1986,1987 85
,
wine white 1985,1986,1987 85
,
wine white 1985,1986,1987 85
,
wine white 1984,1985,1986,1987 100
,
wine white 1985,1986,1987 88
,
wine white 1985,1986,1987 88
,
wine white 1984,1985,1986,1987 100
,
wine white 1988,1989,1990,1991 85
,
wine white 1988,1989,1990,1991 85
,
wine white 1989,1990 101
,
wine white 1989,1990 101
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1994,1995,1996,1997,1998,1999,2000 74
,
wine white 2000 75
,
wine white 1994,1995,1996,1997,1998,1999,2000 74
,
wine white 2000 75
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 95
,
wine white 1995,1996,1997,1998,1999,2000 95
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1996,1997 102
,
wine white 1996,1997 102
,
wine white 1994,1995,1996,1997,1998,1999,2000,2001 74
,
wine white 2000,2001 75
,
wine white 1995,1996,1997,1998,1999,2000,2001 85
,
wine white 1995,1996,1997,1998,1999,2000,2001 85
,
wine white 1996,1997,1998,1999,2000,2001 92
,
wine white 1996,1997 102
,
wine white 1995,1996,1997 92
,
wine white 1995,1996,1997 92
,
wine white 1994,1995,1996,1997 66
,
wine white 1994,1995,1996,1997 66
,
wine white 1994,1995,1996,1997 74
,
wine white 1995,1996 79
,
wine white 1994,1995,1996,1997 74
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996 79
,
wine white 1994,1995,1996,1997 85
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995 98
,
wine white 1994,1995 98
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996,1997 84
,
wine white 1995,1996,1997 84
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996,1997 103
,
wine white 1995,1996,1997 103
,
wine white 1994,1995,1996,1997 102
,
wine white 1994,1995,1996,1997 102
,
wine white 1995,1996,1997 92
,
wine white 1995,1996,1997 92
,
wine white 1994,1995,1996,1997 66
,
wine white 1995,1996 79
,
wine white 1994,1995,1996,1997 85
,
wine white 1994,1995,1996,1997 74
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995 98
,
wine white 1994,1995 98
,
wine white 1995,1996,1997 84
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996,1997 103
,
wine white 1994,1995,1996,1997 102
,
wine white 1995,1996,1997 92
,
wine white 1995,1996,1997 92
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 66
,
wine white 1995,1996 103
,
wine white 1993,1994,1995,1996,1997,1998 85
,
wine white 1991,1992,1993,1994 98
,
wine white 1995,1996,1997,1998,1999,2000 102
,
wine white 1984,1985,1986,1987,1988 100
,
wine white 1981,1982,1983,1984,1985,1986,1987 85
,
wine white 1984,1985,1986,1987,1988 100
,
wine white 1985,1986,1987,1988 88
,
wine white 1989,1990,1991 82
,
wine white 1989,1990,1991,1992,1993,1994,1995,1996 85
,
wine white 1989,1990 83
,
wine white 1990 82
,
wine white 1992 101
,
wine white 1992,1993,1994,1995,1996 103
,
wine white 1988,1989,1990,1991 100
,
wine white 1988,1989,1990,1991,1992,1993,1994 100
,
wine white 1990,1991,1992,1993,1994,1995,1996 98
,
wine white 1988,1989,1990,1991,1992 100
,
wine white 1990,1991,1992,1993,1994,1995,1996 98
,
wine white 1984,1985,1986,1987 100
,
wine white 1984,1985,1986,1987 89
'),
+(2147483647,'
wine white 1986,1987,1988 65
,
wine white 1983,1984,1985,1986,1987,1988,1989 66
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1984,1985,1986,1987,1988 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1982,1983,1984 74
,
wine white 1986,1987 83
,
wine white 1984,1985,1986,1987 85
,
wine white 1988,1989,1990 85
,
wine white 1988,1989,1990 74
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 79
,
wine white 1982,1983,1984 96
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1984,1985,1986 85
,
wine white 1989,1990 101
,
wine white 1985,1986 88
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1989,1990 101
,
wine white 1990 98
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1990 98
,
wine white 1990 88
,
wine white 1992,1993 87
,
wine white 1992,1993 87
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1990,1991,1992 85
,
wine white 1990,1991,1992 85
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1993,1994 102
,
wine white 1993,1994 102
,
wine white 1983,1984,1985,1986,1987,1988,1989 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1984,1985,1986,1987,1988 66
,
wine white 1985,1986,1987,1988,1989,1990 66
,
wine white 1983,1984 74
,
wine white 1986,1987 83
,
wine white 1985,1986,1987 85
,
wine white 1988,1989,1990 85
,
wine white 1988,1989,1990 74
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 96
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1984,1985,1986 85
,
wine white 1989,1990 101
,
wine white 1985,1986 88
,
wine white 1984,1985,1986,1987,1988 101
,
wine white 1989,1990 101
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1990 98
,
wine white 1986,1987,1988,1989,1990 100
,
wine white 1990 98
,
wine white 1990 88
,
wine white 1992,1993 87
,
wine white 1991,1992,1993,1994 85
,
wine white 1991,1992,1993,1994 74
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1990,1991,1992 85
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1990,1991,1992,1993,1994 85
,
wine white 1993,1994 102
,
wine white 1993,1994 102
,
wine white 1990,1991,1992,1993,1994 74
,
wine white 1990,1991,1992,1993,1994 74
,
wine white 1993,1994 102
,
wine white 1993,1994 102
,
wine white 1979,1980,1981,1982 100
,
wine white 1979,1980,1981,1982 100
,
wine white 1983,1984 100
,
wine white 1983,1984 100
,
wine white 1984,1985 101
,
wine white 1984,1985 101
,
wine white 1986,1987,1988,1989,1990,1991 100
,
wine white 1986,1987,1988,1989,1990,1991 100
,
wine white 1986,1987,1988,1989,1990,1991 100
,
wine white 1980,1981,1982,1983 85
,
wine white 1980,1981,1982,1983 85
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 96
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 96
,
wine white 1982,1983,1984 100
,
wine white 1982,1983,1984 100
,
wine white 1990,1991 75
,
wine white 1990,1991 75
,
wine white 1986,1987,1988 83
,
wine white 1986,1987,1988 83
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990,1991 82
,
wine white 1986,1987,1988,1989,1990 83
,
wine white 1986,1987,1988,1989,1990 83
,
wine white 1986,1987,1988,1989,1990,1991 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1986,1987,1988,1989,1990,1991 66
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1986,1987,1988,1989,1990 65
,
wine white 1986,1987,1988,1989,1990,1991 66
,
wine white 1986,1987,1988,1989,1990,1991 66
,
wine white 1988,1989,1990 83
,
wine white 1988,1989,1990 83
,
wine white 1990,1991 101
,
wine white 1990,1991 101
,
wine white 1990,1991 101
,
wine white 1990,1991 101
,
wine white 1988,1989,1990 83
,
wine white 1988,1989,1990 83
,
wine white 1990,1991 85
,
wine white 1990,1991 82
,
wine white 1990,1991 85
,
wine white 1990,1991 82
,
wine white 1987,1988,1989 98
,
wine white 1987,1988,1989 98
,
wine white 1991,1992,1993,1994 66
,
wine white 1991,1992,1993,1994 66
,
wine white 1991,1992,1993,1994 66
,
wine white 1991,1992,1993,1994 66
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1992,1993,1994 103
,
wine white 1991,1992,1993,1994 85
,
wine white 1991,1992,1993,1994 85
,
wine white 1993,1994 79
,
wine white 1993,1994 79
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1993,1994,1995,1996 74
,
wine white 1992,1993,1994,1995,1996 66
,
wine white 1992,1993,1994,1995,1996 66
,
wine white 1992,1993,1994,1995,1996 85
,
wine white 1993,1994,1995,1996 103
,
wine white 1992,1993,1994,1995 103
,
wine white 1993,1994,1995,1996 79
,
wine white 1992,1993,1994,1995,1996 98
,
wine white 1991,1992,1993,1994 98
,
wine white 1994,1995,1996 102
,
wine white 1990,1991 82
,
wine white 1990,1991 82
,
wine white 1993,1994 74
,
wine white 1993,1994 74
,
wine white 1991,1992,1993,1994 85
,
wine white 1991,1992,1993,1994 85
,
wine white 1986,1987 83
,
wine white 1984,1985,1986,1987 85
,
wine white 1984,1985,1986,1987 85
,
wine white 1986,1987 83
,
wine white 1985,1986,1987 85
,
wine white 1985,1986,1987 85
,
wine white 1984,1985,1986,1987 100
,
wine white 1984,1985,1986,1987 100
,
wine white 1985,1986,1987 88
,
wine white 1985,1986,1987 88
,
wine white 1988,1989,1990,1991 85
,
wine white 1988,1989,1990,1991 85
,
wine white 1989,1990 101
,
wine white 1989,1990 101
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 100
,
wine white 1987,1988,1989,1990,1991 98
,
wine white 1994,1995,1996,1997,1998,1999,2000 74
,
wine white 2000 75
,
wine white 1994,1995,1996,1997,1998,1999,2000 74
,
wine white 2000 75
,
wine white 1995,1996,1997,1998,1999,2000 95
,
wine white 1995,1996,1997,1998,1999,2000 95
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1995,1996,1997,1998,1999,2000 85
,
wine white 1996,1997 102
,
wine white 1996,1997 102
,
wine white 1994,1995,1996,1997,1998,1999,2000,2001 74
,
wine white 2000,2001 75
,
wine white 1995,1996,1997,1998,1999,2000,2001 85
,
wine white 1996,1997,1998,1999,2000,2001 92
,
wine white 1995,1996,1997,1998,1999,2000,2001 85
,
wine white 1996,1997 102
,
wine white 1995,1996,1997 92
,
wine white 1995,1996,1997 92
,
wine white 1994,1995,1996,1997 66
,
wine white 1994,1995,1996,1997 66
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996 79
,
wine white 1994,1995,1996,1997 85
,
wine white 1994,1995,1996,1997 74
,
wine white 1995,1996 79
,
wine white 1994,1995,1996,1997 74
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995 98
,
wine white 1994,1995 98
,
wine white 1995,1996,1997 84
,
wine white 1994,1995,1996,1997 85
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996,1997 84
,
wine white 1995,1996,1997 103
,
wine white 1995,1996,1997 103
,
wine white 1994,1995,1996,1997 102
,
wine white 1994,1995,1996,1997 102
,
wine white 1995,1996,1997 92
,
wine white 1995,1996,1997 92
,
wine white 1994,1995,1996,1997 66
,
wine white 1994,1995,1996,1997 74
,
wine white 1995,1996 79
,
wine white 1994,1995,1996,1997 85
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995 98
,
wine white 1994,1995 98
,
wine white 1994,1995,1996,1997 85
,
wine white 1995,1996,1997 84
,
wine white 1994,1995,1996,1997 103
,
wine white 1995,1996,1997 103
,
wine white 1994,1995,1996,1997 102
,
wine white 1995,1996,1997 92
,
wine white 1995,1996,1997 92
,
wine white 1994,1995,1996,1997 103
,
wine white 1994,1995,1996,1997 103
,
wine white 1997,1998,1999,2000 92
,
wine white 1995,1996,1997,1998,1999,2000 66
,
wine white 1995,1996 103
,
wine white 1993,1994,1995,1996,1997,1998 85
,
wine white 1991,1992,1993,1994 98
,
wine white 1995,1996,1997,1998,1999,2000 102
,
wine white 1984,1985,1986,1987,1988 100
,
wine white 1981,1982,1983,1984,1985,1986,1987 85
,
wine white 1985,1986,1987,1988 88
,
wine white 1984,1985,1986,1987,1988 100
,
wine white 1989,1990,1991 82
,
wine white 1989,1990 83
,
wine white 1990 82
,
wine white 1989,1990,1991,1992,1993,1994,1995,1996 85
,
wine white 1992,1993,1994,1995,1996 103
,
wine white 1992 101
,
wine white 1988,1989,1990,1991 100
,
wine white 1990,1991,1992,1993,1994,1995,1996 98
,
wine white 1988,1989,1990,1991,1992,1993,1994 100
,
wine white 1990,1991,1992,1993,1994,1995,1996 98
,
wine white 1988,1989,1990,1991,1992 100
,
wine white 1984,1985,1986,1987 100
,
wine white 1984,1985,1986,1987 89
');
+ ]]>
+select * from test where match('ZONESPAN:zoneC cabbages and kings')
@@ -68,6 +99,13 @@ create table test_table
select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships and') OPTION max_matches=3select *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships and') OPTION max_matches=2,sort_method=kbufferselect *, zonespanlist() as c from test where match('ZONESPAN:(zoneC,zoneB) ships and') group by gid within group order by id desc OPTION max_matches=2
+
+select *, zonespanlist() l from i1 where match('ZONESPAN:(h1)white wine 1987') order by id asc
+select *, zonespanlist() l from i1 where match('ZONESPAN:(h1)1987 white wine') order by id asc
+select *, zonespanlist() l from i1 where match('ZONESPAN:(h1)1987 wine white 65') order by id asc
+select *, zonespanlist() l from i1 where match('ZONESPAN:(h1)wine white 1987 65') order by id asc
+select *, zonespanlist() l from i1 where match('( ZONESPAN:(h1)1987 wine white ) NEAR/3 65') order by id asc
+select *, zonespanlist() l from i1 where match('( ZONESPAN:(h1)wine white 1987 ) NEAR/3 65') order by id asc
From cf026422ce66bd0a007483db18d9d48fe3d11857 Mon Sep 17 00:00:00 2001
From: tomat
Date: Wed, 4 Mar 2015 12:54:19 +0000
Subject: [PATCH 13/73] fixed documentation issues #1736 #1945 #1838 #1813
#1732 #1712 #1597
---
doc/sphinx.xml | 58 +++++++++++++++++++++++---------------------------
1 file changed, 27 insertions(+), 31 deletions(-)
diff --git a/doc/sphinx.xml b/doc/sphinx.xml
index c5b9f3ed..d3d1d7c7 100644
--- a/doc/sphinx.xml
+++ b/doc/sphinx.xml
@@ -1489,12 +1489,6 @@ RT indexes are currently quality feature, but there are still a few known
usage quirks. Those quirks are listed in this section.
-Prefix indexing is supported with dict = keywords starting 2.0.2-beta. Infix indexing is experimental in trunk.
-Disk chunks optimization routine is not implemented yet.
-On initial index creation, attributes are reordered by type,
-in the following order: uint, bigint, float, timestamp, string. So when
-using INSERT without an explicit column names list, specify all uint
-column values first, then bigint, etc.Default conservative RAM chunk limit ()
of 32M can lead to poor performance on bigger indexes, you should raise it to
256..1024M if you're planning to index gigabytes.
@@ -3978,7 +3972,8 @@ directive. Sphinx currently defaults to collation.
Collations should affect all string attribute comparisons, including
those within ORDER BY and GROUP BY, so differently ordered or grouped results
-can be returned depending on the collation chosen.
+can be returned depending on the collation chosen. Note that collations don't
+affect full-text searching, for that use charset_table.
@@ -9509,8 +9504,8 @@ sql_joined_field = \
SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC
sql_joined_field = bigint tag from ranged-query; \
- SELECT id, tag FROM tags WHERE id>=$start AND id<=$end; \
- SELECT MIN(id), MAX(id) FROM tags ORDER BY docid ASC
+ SELECT id, tag FROM tags WHERE id>=$start AND id<=$end ORDER BY id ASC; \
+ SELECT MIN(id), MAX(id) FROM tags
@@ -10434,6 +10429,7 @@ For reference, different index files store the following data:
.spm stores MVA data;.spp stores hit (aka posting, aka word occurrence) lists for each word ID;.sps stores string attribute data.
+.spe stores skip-lists to speed up doc-list filteringExample:
@@ -10614,8 +10610,8 @@ option are as follows:
lemmatize_en - apply English lemmatizer and pick a single root form (added in 2.2.1-beta);lemmatize_de - apply German lemmatizer and pick a single root form (added in 2.2.1-beta);lemmatize_ru_all - apply Russian lemmatizer and index all possible root forms (added in 2.1.1-beta);
-lemmatize_en_all - apply Russian lemmatizer and index all possible root forms (added in 2.2.1-beta);
-lemmatize_de_all - apply Russian lemmatizer and index all possible root forms (added in 2.2.1-beta);
+lemmatize_en_all - apply English lemmatizer and index all possible root forms (added in 2.2.1-beta);
+lemmatize_de_all - apply German lemmatizer and index all possible root forms (added in 2.2.1-beta);stem_en - apply Porter's English stemmer;stem_ru - apply Porter's Russian stemmer;stem_enru - apply Porter's English and Russian stemmers;
@@ -12618,7 +12614,7 @@ Added in 2.1.1-beta.
When index_field_lengths is set to 1, indexer
will 1) create a respective length attribute for every full-text field,
-sharing the same name; 2) compute a field length (counted in keywords) for
+sharing the same name but with _len suffix; 2) compute a field length (counted in keywords) for
every document and store in to a respective attribute; 3) compute the per-index
averages. The lengths attributes will have a special TOKENCOUNT type, but their
values are in fact regular 32-bit integers, and their values are generally
@@ -13798,25 +13794,6 @@ collation_libc_locale = fr_FR
-plugin_dir
-
-Trusted location for the dynamic libraries (UDFs).
-Optional, default is empty (no location).
-Introduced in version 2.0.1-beta.
-
-
-Specifies the trusted directory from which the
-UDF libraries can be loaded. Requires
-workers = thread to take effect.
-
-Example:
-
-workers = threads
-plugin_dir = /usr/local/sphinx/lib
-
-
-
-
mysql_version_string
A server version string to return via MySQL protocol.
@@ -14357,6 +14334,25 @@ rlp_max_batch_docs = 100
+
+plugin_dir
+
+Trusted location for the dynamic libraries (UDFs).
+Optional, default is empty (no location).
+Introduced in version 2.0.1-beta.
+
+
+Specifies the trusted directory from which the
+UDF libraries can be loaded. Requires
+workers = thread to take effect.
+
+Example:
+
+plugin_dir = /usr/local/sphinx/lib
+
+
+
+
From 8421cc7f25e2cec85a82c847ff9557674a4d0448 Mon Sep 17 00:00:00 2001
From: tomat
Date: Wed, 4 Mar 2015 13:58:05 +0000
Subject: [PATCH 14/73] fixed #2181 error message for special filter with wrong
type of value
---
src/sphinxfilter.cpp | 74 ++++++++++++++++++++++----------------------
1 file changed, 37 insertions(+), 37 deletions(-)
diff --git a/src/sphinxfilter.cpp b/src/sphinxfilter.cpp
index addce225..b69d72e6 100644
--- a/src/sphinxfilter.cpp
+++ b/src/sphinxfilter.cpp
@@ -826,42 +826,6 @@ ISphFilter * ISphFilter::Join ( ISphFilter * pFilter )
/// helper functions
-static ISphFilter * CreateSpecialFilter ( const CSphString & sName, ESphFilter eFilterType, bool bHasEqual )
-{
- if ( sName=="@id" )
- {
- switch ( eFilterType )
- {
- case SPH_FILTER_VALUES: return new Filter_IdValues;
- case SPH_FILTER_RANGE:
- if ( bHasEqual )
- return new Filter_IdRange;
- else
- return new Filter_IdRange;
- default:
- assert ( 0 && "invalid filter on @id" );
- return NULL;
- }
- } else if ( sName=="@weight" )
- {
- switch ( eFilterType )
- {
- case SPH_FILTER_VALUES: return new Filter_WeightValues;
- case SPH_FILTER_RANGE:
- if ( bHasEqual )
- return new Filter_WeightRange;
- else
- return new Filter_WeightRange;
- default:
- assert ( 0 && "invalid filter on @weight" );
- return NULL;
- }
- }
-
- return NULL;
-}
-
-
static inline ISphFilter * ReportError ( CSphString & sError, const char * sMessage, ESphFilter eFilterType )
{
CSphString sFilterName;
@@ -880,6 +844,40 @@ static inline ISphFilter * ReportError ( CSphString & sError, const char * sMess
}
+static ISphFilter * CreateSpecialFilter ( const CSphString & sName, ESphFilter eFilterType, bool bHasEqual, CSphString & sError )
+{
+ if ( sName=="@id" )
+ {
+ switch ( eFilterType )
+ {
+ case SPH_FILTER_VALUES: return new Filter_IdValues;
+ case SPH_FILTER_RANGE:
+ if ( bHasEqual )
+ return new Filter_IdRange;
+ else
+ return new Filter_IdRange;
+ default:
+ return ReportError ( sError, "unsupported filter type '%s' on @id", eFilterType );
+ }
+ } else if ( sName=="@weight" )
+ {
+ switch ( eFilterType )
+ {
+ case SPH_FILTER_VALUES: return new Filter_WeightValues;
+ case SPH_FILTER_RANGE:
+ if ( bHasEqual )
+ return new Filter_WeightRange;
+ else
+ return new Filter_WeightRange;
+ default:
+ return ReportError ( sError, "unsupported filter type '%s' on @weight", eFilterType );
+ }
+ }
+
+ return NULL;
+}
+
+
static ISphFilter * CreateFilter ( ESphAttr eAttrType, ESphFilter eFilterType, int iNumValues,
const CSphAttrLocator & tLoc, CSphString & sError, bool bHasEqual, ESphCollation eCollation )
{
@@ -1290,7 +1288,9 @@ static ISphFilter * CreateFilter ( const CSphFilterSettings & tSettings, const C
if ( sAttrName.Begins("@") )
{
- pFilter = CreateSpecialFilter ( sAttrName, tSettings.m_eType, tSettings.m_bHasEqual );
+ pFilter = CreateSpecialFilter ( sAttrName, tSettings.m_eType, tSettings.m_bHasEqual, sError );
+ if ( !pFilter && !sError.IsEmpty() )
+ return NULL;
}
// try to create a filter on a JSON attribute
From 3ece4ee8cdea442aec9d424d3128dc22c70f7c2e Mon Sep 17 00:00:00 2001
From: kevg
Date: Fri, 6 Mar 2015 12:49:08 +0000
Subject: [PATCH 15/73] added changelog to 2.2.8
---
doc/sphinx.xml | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/doc/sphinx.xml b/doc/sphinx.xml
index d3d1d7c7..6571ff57 100644
--- a/doc/sphinx.xml
+++ b/doc/sphinx.xml
@@ -14376,6 +14376,26 @@ plugin_dir = /usr/local/sphinx/lib
Sphinx revision history
+Version 2.2.8-release, ?? mar 2015
+Minor features
+
+added #2166, per agent HA strategy for distributed indexes
+
+Bug fixes
+
+fixed #2171, some index options do not work for template indexes
+fixed #2170, joined fields indexation with document id equals to 0
+fixed #2172, incorrect results with field position fulltext operators
+fixed #2182, incorrect query results with multiple same destination wordforms
+fixed #2110, crash on snippet generation
+fixed #2178, ZONESPAN operator for queries with more than two words
+fixed #2181, improved error message on incorrect filters
+fixed WLCCS ranking factor computation
+fixed memory leak on queries with ZONEs
+
+
+
+
Version 2.2.7-release, 20 jan 2015Minor features
From e2cb534fb16298e430a9cccbfb3628db30cdd34a Mon Sep 17 00:00:00 2001
From: deogar
Date: Mon, 9 Mar 2015 18:47:07 +0000
Subject: [PATCH 16/73] Sphinx 2.2.8-release is here
---
doc/indexer.1 | 6 +-
doc/indextool.1 | 6 +-
doc/manpages.xml | 10 +-
doc/search.1 | 6 +-
doc/searchd.1 | 6 +-
doc/spelldump.1 | 6 +-
doc/sphinx.html | 1002 +++++++++++++++++++++---------------------
doc/sphinx.txt | 478 ++++++++++----------
doc/sphinx.xml | 24 +-
mysqlse/ha_sphinx.cc | 2 +-
src/sphinx.h | 2 +-
11 files changed, 791 insertions(+), 757 deletions(-)
diff --git a/doc/indexer.1 b/doc/indexer.1
index 960df8f1..1a9e52d4 100644
--- a/doc/indexer.1
+++ b/doc/indexer.1
@@ -2,12 +2,12 @@
.\" Title: indexer
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets v1.76.1
-.\" Date: 01/20/2015
+.\" Date: 03/09/2015
.\" Manual: Sphinxsearch
-.\" Source: 2.2.8-dev
+.\" Source: 2.2.8-release
.\" Language: English
.\"
-.TH "INDEXER" "1" "01/20/2015" "2\&.2\&.8\-dev" "Sphinxsearch"
+.TH "INDEXER" "1" "03/09/2015" "2\&.2\&.8\-release" "Sphinxsearch"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/indextool.1 b/doc/indextool.1
index 2de8a180..51959301 100644
--- a/doc/indextool.1
+++ b/doc/indextool.1
@@ -2,12 +2,12 @@
.\" Title: indextool
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets v1.76.1
-.\" Date: 01/20/2015
+.\" Date: 03/09/2015
.\" Manual: Sphinxsearch
-.\" Source: 2.2.8-dev
+.\" Source: 2.2.8-release
.\" Language: English
.\"
-.TH "INDEXTOOL" "1" "01/20/2015" "2\&.2\&.8\-dev" "Sphinxsearch"
+.TH "INDEXTOOL" "1" "03/09/2015" "2\&.2\&.8\-release" "Sphinxsearch"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/manpages.xml b/doc/manpages.xml
index c5d9c6cc..c85de4bf 100644
--- a/doc/manpages.xml
+++ b/doc/manpages.xml
@@ -12,7 +12,7 @@
Sphinxsearch
- 2.2.8-dev
+ 2.2.8-release
@@ -467,7 +467,7 @@ $ indexer mysmallindex mybigindex
Sphinxsearch
- 2.2.8-dev
+ 2.2.8-release
@@ -932,7 +932,7 @@ $ searchd --config /home/myuser/sphinx.conf --status
Sphinxsearch
- 2.2.8-dev
+ 2.2.8-release
@@ -1321,7 +1321,7 @@ $ searchd --config /home/myuser/sphinx.conf --status
Sphinxsearch
- 2.2.8-dev
+ 2.2.8-release
@@ -1440,7 +1440,7 @@ zoning > zoning Sphinxsearch
- 2.2.8-dev
+ 2.2.8-release
diff --git a/doc/search.1 b/doc/search.1
index b38b6713..be78207f 100644
--- a/doc/search.1
+++ b/doc/search.1
@@ -2,12 +2,12 @@
.\" Title: search
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets v1.76.1
-.\" Date: 01/20/2015
+.\" Date: 03/09/2015
.\" Manual: Sphinxsearch
-.\" Source: 2.2.8-dev
+.\" Source: 2.2.8-release
.\" Language: English
.\"
-.TH "SEARCH" "1" "01/20/2015" "2\&.2\&.8\-dev" "Sphinxsearch"
+.TH "SEARCH" "1" "03/09/2015" "2\&.2\&.8\-release" "Sphinxsearch"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/searchd.1 b/doc/searchd.1
index 39961344..9c7a72df 100644
--- a/doc/searchd.1
+++ b/doc/searchd.1
@@ -2,12 +2,12 @@
.\" Title: searchd
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets v1.76.1
-.\" Date: 01/20/2015
+.\" Date: 03/09/2015
.\" Manual: Sphinxsearch
-.\" Source: 2.2.8-dev
+.\" Source: 2.2.8-release
.\" Language: English
.\"
-.TH "SEARCHD" "1" "01/20/2015" "2\&.2\&.8\-dev" "Sphinxsearch"
+.TH "SEARCHD" "1" "03/09/2015" "2\&.2\&.8\-release" "Sphinxsearch"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/spelldump.1 b/doc/spelldump.1
index a3c1649b..2d8dd99b 100644
--- a/doc/spelldump.1
+++ b/doc/spelldump.1
@@ -2,12 +2,12 @@
.\" Title: spelldump
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets v1.76.1
-.\" Date: 01/20/2015
+.\" Date: 03/09/2015
.\" Manual: Sphinxsearch
-.\" Source: 2.2.8-dev
+.\" Source: 2.2.8-release
.\" Language: English
.\"
-.TH "SPELLDUMP" "1" "01/20/2015" "2\&.2\&.8\-dev" "Sphinxsearch"
+.TH "SPELLDUMP" "1" "03/09/2015" "2\&.2\&.8\-release" "Sphinxsearch"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/doc/sphinx.html b/doc/sphinx.html
index 62ed5dea..fa2dbde9 100644
--- a/doc/sphinx.html
+++ b/doc/sphinx.html
@@ -1,7 +1,7 @@
-Sphinx 2.2.8-dev reference manual
+Sphinx 2.2.8-release reference manual
-
Past and present employees of Sphinx Technologies Inc who should be
noted on their work on Sphinx (in alphabetical order):
Adam Rice
@@ -562,7 +563,7 @@
Author
Yuri Schapov
-
Contributors
People who contributed to Sphinx and their contributions (in no particular order):
+
Contributors
People who contributed to Sphinx and their contributions (in no particular order):
Robert "coredev" Bengtsson (Sweden), initial version of PostgreSQL data source
Len Kranendonk, Perl API
Dmytro Shteflyuk, Ruby API
@@ -660,9 +661,9 @@
Author
Extract everything from the distribution tarball (haven't you already?)
and go to the sphinx subdirectory. (We are using
- version 2.2.8-dev here for the sake of example only; be sure to change this
+ version 2.2.8-release here for the sake of example only; be sure to change this
to a specific version you're using.)
-
$ tar xzvf sphinx-2.2.8-dev.tar.gz
+
$ tar xzvf sphinx-2.2.8-release.tar.gz
$ cd sphinx
Run the configuration program:
$ ./configure
@@ -713,7 +714,7 @@
Author
2.3. Installing Sphinx packages on Debian and Ubuntu
There are two ways of getting Sphinx for Ubuntu: regular deb packages and the Launchpad PPA repository.
Deb packages:
Sphinx requires a few libraries to be installed on Debian/Ubuntu. Use apt-get to download and install these dependencies:
Installing Sphinx is much easier from Sphinxsearch PPA repository, because you will get all dependencies and can also update Sphinx to the latest version with the same command.
First, add Sphinxsearch repository and update the list of packages:
Installing Sphinx on a Windows server is often easier than installing on a Linux environment;
unless you are preparing code patches, you can use the pre-compiled binary files from the Downloads
area on the website.
Extract everything from the .zip file you have downloaded -
- sphinx-2.2.8-dev-win32.zip,
- or sphinx-2.2.8-dev-win32-pgsql.zip if you need PostgresSQL support as well.
- (We are using version 2.2.8-dev here for the sake of example only;
+ sphinx-2.2.8-release-win32.zip,
+ or sphinx-2.2.8-release-win32-pgsql.zip if you need PostgresSQL support as well.
+ (We are using version 2.2.8-release here for the sake of example only;
be sure to change this to a specific version you're using.)
You can use Windows Explorer in Windows XP and up to extract the files,
or a freeware package like 7Zip to open the archive.
For the remainder of this guide, we will assume that the folders are unzipped into C:\Sphinx,
@@ -796,7 +797,7 @@
Author
is obsolete and will be removed in the near future.
(excluding title and content, that are full-text fields) as
attributes, indexing them, and then using API calls to
setup filtering, sorting, and grouping. Here as an example.
-
// only search posts by author whose ID is 123
$cl->SetFilter ( "author_id", array ( 123 ) );
@@ -1250,7 +1251,7 @@
Author
Obviously, that's not much of a difference for 2000-row table,
but when it comes to indexing 10-million-row MyISAM table,
ranged queries might be of some help.
-
sql_query_post vs. sql_query_post_index
+
sql_query_post vs. sql_query_post_index
The difference between post-query and post-index query is in that post-query
is run immediately when Sphinx received all the documents, but further indexing
may still fail for some other reason. On the contrary,
@@ -1653,13 +1654,7 @@
Author
RT indexes are currently quality feature, but there are still a few known
usage quirks. Those quirks are listed in this section.
-
Prefix indexing is supported with dict = keywords starting 2.0.2-beta. Infix indexing is experimental in trunk.
-
Disk chunks optimization routine is not implemented yet.
-
On initial index creation, attributes are reordered by type,
-in the following order: uint, bigint, float, timestamp, string. So when
-using INSERT without an explicit column names list, specify all uint
-column values first, then bigint, etc.
Default conservative RAM chunk limit (rt_mem_limit)
of 32M can lead to poor performance on bigger indexes, you should raise it to
256..1024M if you're planning to index gigabytes.
High DELETE/REPLACE rate can lead to kill-list fragmentation
@@ -1777,7 +1772,7 @@
Author
is not very good for disk use and crash recovery time. Starting
with 2.0.1-beta you can configure searchd
to perform a periodic RAM chunk flush to fix that problem
-using a rt_flush_period
+using a rt_flush_period
directive. With periodic flushes enabled, searchd
will keep a separate thread, checking whether RT indexes RAM
chunks need to be written back to disk. Once that happens,
@@ -2243,7 +2238,7 @@
Legacy matching modes automatically select a ranker as follows:
SPH_MATCH_ALL uses SPH_RANK_PROXIMITY ranker;
SPH_MATCH_ANY uses SPH_RANK_MATCHANY ranker;
@@ -3011,7 +3006,7 @@
Author
SPH_SORT_RELEVANCE is equivalent to sorting by "@weight DESC, @id ASC" in extended sorting mode,
SPH_SORT_ATTR_ASC is equivalent to "attribute ASC, @weight DESC, @id ASC",
and SPH_SORT_ATTR_DESC to "attribute DESC, @weight DESC, @id ASC" respectively.
-
SPH_SORT_TIME_SEGMENTS mode
+
SPH_SORT_TIME_SEGMENTS mode
In SPH_SORT_TIME_SEGMENTS mode, attribute values are split into so-called
time segments, and then sorted by time segment first, and by relevance second.
@@ -3559,7 +3554,8 @@
Author
Collations should affect all string attribute comparisons, including
those within ORDER BY and GROUP BY, so differently ordered or grouped results
-can be returned depending on the collation chosen.
+can be returned depending on the collation chosen. Note that collations don't
+affect full-text searching, for that use charset_table.
UDFs reside in the external dynamic libraries (.so files on UNIX and .dll
on Windows systems). Library files need to reside in a trusted folder
-specified by plugin_dir directive,
+specified by plugin_dir directive,
for obvious security reasons: securing a single folder is easy; letting
anyone install arbitrary code into searchd is a risk.
You can load and unload them dynamically into searchd
@@ -3602,7 +3598,7 @@
Author
DROP FUNCTION SphinxQL statements
respectively. Sphinx keeps track of the currently loaded functions, that is,
every time you create or drop an UDF, searchd writes
-its state to the sphinxql_state file
+its state to the sphinxql_state file
as a plain good old SQL script.
Once you successfully load an UDF, you can use it in your SELECT or other
@@ -4884,7 +4880,7 @@
Author
can also noticeably impact performance.
'max_query_time' - integer (max search time threshold, msec)
'ranker' - any of 'proximity_bm25', 'bm25', 'none', 'wordcount', 'proximity',
'matchany', 'fieldmask', 'sph04', 'expr', or 'export' (refer to Section 5.4, “Search results ranking”
for more details on each ranker)
@@ -4996,7 +4992,7 @@
Author
SHOW META shows additional meta-information about the latest
query such as query time and keyword statistics. IO and CPU counters will only be available if searchd was started with --iostats and --cpustats switches respectively.
Additional predicted_time, dist_predicted_time, [{local|dist}]_fetched_[{docs|hits|skips}] counters will only be available if searchd was configured with
-predicted time costs and query had predicted_time in OPTION clause.
+predicted time costs and query had predicted_time in OPTION clause.
mysql> SELECT * FROM test1 WHERE MATCH('test|one|two');
+------+--------+----------+------------+
@@ -5506,7 +5502,7 @@
Author
installs a user-defined function (UDF)
with the given name and type from the given library file.
The library file must reside in a trusted
-plugin_dir directory.
+plugin_dir directory.
On success, the function is available for use in all subsequent
queries that the server receives. Example:
@@ -5818,7 +5814,7 @@
Author
write would need to be replayed. Those writes normally happen either
on a clean shutdown, or periodically with a (big enough!) interval
between writes specified in
-rt_flush_period directive.
+rt_flush_period directive.
So such a backup made at an arbitrary point in time just might end up
with way too much binary log data to replay.
@@ -5875,7 +5871,7 @@
Author
agents or distributed index. It includes the values like the age of the last
request, last answer, the number of different kind of errors and
successes, etc. The statistic is shown for every agent for last 1, 5
-and 15 intervals, each of them of ha_period_karma seconds.
+and 15 intervals, each of them of ha_period_karma seconds.
The command exists only in sphinxql.
mysql> SHOW AGENT STATUS;
@@ -6158,8 +6154,8 @@
Author
to the SHOW INDEX STATUS and SHOW STATUS statements respectively).
The optimization thread can be IO-throttled, you can control the
maximum number of IOs per second and the maximum IO size
-with rt_merge_iops
-and rt_merge_maxiosize
+with rt_merge_iops
+and rt_merge_maxiosize
directives respectively. The optimization jobs queue is lost
on daemon crash.
@@ -6760,7 +6756,7 @@
Author
(Section 9.4.5, “SetGeoAnchor”) are now internally implemented using
this computed expressions mechanism, using magic names '@expr' and '@geodist'
respectively.
-
Example:
+
Example:
$cl->SetSelect ( "*, @weight+(user_karma+ln(pageviews))*0.1 AS myweight" );
$cl->SetSelect ( "exp_years, salary_gbp*{$gbp_usd_rate} AS salary_usd,
IF(age>40,1,0) AS over40" );
@@ -7902,10 +7898,10 @@
Author
because to fix it, we need to be able either to reproduce and fix the bug,
or to deduce what's causing it from the information that you provide.
So here are some instructions on how to do that.
-
Bug-tracker
Nothing special to say here. Here is the
+
Bug-tracker
Nothing special to say here. Here is the
<a href="http://sphinxsearch.com/bugs">link</a>. Create a new
ticket and describe your bug in details so both you and developers can
-save their time.
Crashes
In case of crashes we sometimes can get enough info to fix from
+save their time.
Crashes
In case of crashes we sometimes can get enough info to fix from
backtrace.
Sphinx tries to write crash backtrace to its log file. It may look like
this:
@@ -7952,7 +7948,7 @@
Author
that the binary is not stripped. Our official binary packages should be fine.
(That, or we have the symbols stored.) However, if you manually build Sphinx
from the source tarball, do not run strip utility on that
-binary, and/or do not let your build/packaging system do that!
Uploading your data
To fix your bug developers often need to reproduce it on their machines.
+binary, and/or do not let your build/packaging system do that!
Uploading your data
To fix your bug developers often need to reproduce it on their machines.
To do this they need your sphinx.conf, index files, binlog (if present),
sometimes data to index (like SQL tables or XMLpipe2 data files) and queries.
mssql type is currently only available on Windows.
odbc type is available both on Windows natively and on
Linux through UnixODBC library.
-
Example:
+
Example:
type = mysql
12.1.2. sql_host
@@ -8181,7 +8177,7 @@
Author
and "127.0.0.1" will force TCP/IP usage. Refer to
MySQL manual
for more details.
-
Example:
+
Example:
sql_host = localhost
12.1.3. sql_port
@@ -8190,7 +8186,7 @@
Author
Optional, default is 3306 for mysql source type and 5432 for pgsql type.
Applies to SQL source types (mysql, pgsql, mssql) only.
Note that it depends on sql_host setting whether this value will actually be used.
-
Example:
+
Example:
sql_port = 3306
12.1.4. sql_user
@@ -8198,7 +8194,7 @@
Author
SQL user to use when connecting to sql_host.
Mandatory, no default value.
Applies to SQL source types (mysql, pgsql, mssql) only.
-
Example:
+
Example:
sql_user = test
12.1.5. sql_pass
@@ -8206,7 +8202,7 @@
Author
SQL user password to use when connecting to sql_host.
Mandatory, no default value.
Applies to SQL source types (mysql, pgsql, mssql) only.
-
Example:
+
Example:
sql_pass = mysecretpassword
12.1.6. sql_db
@@ -8214,7 +8210,7 @@
Author
SQL database (in MySQL terms) to use after the connection and perform further queries within.
Mandatory, no default value.
Applies to SQL source types (mysql, pgsql, mssql) only.
-
Example:
+
Example:
sql_db = test
12.1.7. sql_sock
@@ -8226,7 +8222,7 @@
Author
On Linux, it would typically be /var/lib/mysql/mysql.sock.
On FreeBSD, it would typically be /tmp/mysql.sock.
Note that it depends on sql_host setting whether this value will actually be used.
-
Example:
+
Example:
sql_sock = /tmp/mysql.sock
12.1.8. mysql_connect_flags
@@ -8252,7 +8248,7 @@
Author
both in theory and in practice. However, enabling compression on 100 Mbps links
may improve indexing time significantly (upto 20-30% of the total indexing time
improvement was reported). Your mileage may vary.
-
ODBC DSN (Data Source Name) specifies the credentials (host, user, password, etc)
to use when connecting to ODBC data source. The format depends on specific ODBC
driver used.
-
it will automatically switch to a variant that matches keywords
in those fields, computes a sum of matched payloads multiplied
by field weights, and adds that sum to the final rank.
-
Example:
+
Example:
sql_joined_field = \
tagstext from query; \
SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC
sql_joined_field = bigint tag from ranged-query; \
- SELECT id, tag FROM tags WHERE id>=$start AND id<=$end; \
- SELECT MIN(id), MAX(id) FROM tags ORDER BY docid ASC
+ SELECT id, tag FROM tags WHERE id>=$start AND id<=$end ORDER BY id ASC; \
+ SELECT MIN(id), MAX(id) FROM tags
12.1.14. sql_query_range
@@ -8445,7 +8441,7 @@
Author
exactly equal to $start or $end from your query.
The example in Section 3.8, “Ranged queries”) illustrates that; note how it
uses greater-or-equal and less-or-equal comparisons.
-
Example:
+
Example:
sql_query_range = SELECT MIN(id),MAX(id) FROM documents
12.1.15. sql_range_step
@@ -8466,7 +8462,7 @@
Author
$start=3012, $end=3456
-
Example:
+
Example:
sql_range_step = 1000
12.1.16. sql_query_killlist
@@ -8512,7 +8508,7 @@
Author
over the network when sending queries. (Because that might be too much
of an impact when the K-list is huge.) You will need to setup a
separate per-server K-lists in that case.
-
Example:
+
Example:
sql_query_killlist = \
SELECT id FROM documents WHERE updated_ts>=@last_reindex UNION \
SELECT id FROM documents_deleted WHERE deleted_ts>=@last_reindex
@@ -8534,7 +8530,7 @@
Author
such bitfields are packed together in 32-bit chunks in .spa
attribute data file. Bit size settings are ignored if using
inline storage.
-
Multi-value (there might be multiple attributes declared), optional.
Applies to SQL source types (mysql, pgsql, mssql) only.
Equivalent to sql_attr_uint declaration with a bit count of 1.
-
Example:
+
Example:
sql_attr_bool = is_deleted # will be packed to 1 bit
12.1.19. sql_attr_bigint
@@ -8555,7 +8551,7 @@
Author
Note that unlike sql_attr_uint,
these values are signed.
Introduced in version 0.9.9-rc1.
-
Example:
+
Example:
sql_attr_bigint = my_bigint_id
12.1.20. sql_attr_timestamp
@@ -8581,7 +8577,7 @@
Author
and UNIX_TIMESTAMP() in MySQL will not return anything expected.
If you only needs to work with dates, not times, consider TO_DAYS()
function in MySQL instead.
-
One important usage of the float attributes is storing latitude
and longitude values (in radians), for further usage in query-time
geosphere distance calculations.
-
RANGE-QUERY is SQL query used to fetch min and max ID values, similar to 'sql_query_range'
-
Example:
+
Example:
sql_attr_multi = uint tag from query; SELECT id, tag FROM tags
sql_attr_multi = bigint tag from ranged-query; \
SELECT id, tag FROM tags WHERE id>=$start AND id<=$end; \
@@ -8648,7 +8644,7 @@
Author
declared using sql_attr_string will not be full-text
indexed; you can use sql_field_string
directive for that.
-
Example:
+
Example:
sql_attr_string = title # will be stored but will not be indexed
value but does not full-text index it. In some cases it might be desired to both full-text
index the column and store it as attribute. sql_field_string lets you do
exactly that. Both the field and the attribute will be named the same.
-
Example:
+
Example:
sql_field_string = title # will be both indexed and stored
12.1.27. sql_file_field
@@ -8743,7 +8739,7 @@
Author
in size are skipped. Any errors during the file loading (IO errors, missed
limits, etc) will be reported as indexing warnings and will not early
terminate the indexing. No content will be indexed for such files.
-
Example:
+
Example:
sql_file_field = my_file_path # load and index files referred to by my_file_path
12.1.28. sql_query_post
@@ -8761,7 +8757,7 @@
Author
For instance, updates on helper table that permanently change
the last successfully indexed ID should not be run from post-fetch
query; they should be run from post-index query instead.
-
Example:
+
Example:
sql_query_post = DROP TABLE my_tmp_table
12.1.29. sql_query_post_index
@@ -8777,7 +8773,7 @@
Author
expanded to maximum document ID which was actually fetched
from the database during indexing. If no documents were indexed,
$maxid will be expanded to 0.
-
Example:
+
Example:
sql_query_post_index = REPLACE INTO counters ( id, val ) \
VALUES ( 'max_indexed_id', $maxid )
@@ -8791,7 +8787,7 @@
Author
database server. It causes the indexer to sleep for given amount of
milliseconds once per each ranged query step. This sleep is unconditional,
and is performed before the fetch query.
-
Example:
+
Example:
sql_ranged_throttle = 1000 # sleep for 1 sec before each query step
12.1.31. xmlpipe_command
@@ -8802,7 +8798,7 @@
Author
Specifies a command that will be executed and which output
will be parsed for documents. Refer to Section 3.9, “xmlpipe2 data source” for specific format description.
-
Makes the specified XML element indexed as both a full-text field and a string attribute.
Equivalent to <sphinx:field name="field" attr="string"/> declaration within the XML file.
-
Example:
+
Example:
xmlpipe_field_string = subject
12.1.34. xmlpipe_attr_uint
@@ -8832,7 +8828,7 @@
Author
Multi-value, optional.
Applies to xmlpipe2 source type only.
Syntax fully matches that of sql_attr_uint.
-
Example:
+
Example:
xmlpipe_attr_uint = author_id
12.1.35. xmlpipe_attr_bigint
@@ -8841,7 +8837,7 @@
Author
Multi-value, optional.
Applies to xmlpipe2 source type only.
Syntax fully matches that of sql_attr_bigint.
-
Example:
+
Example:
xmlpipe_attr_bigint = my_bigint_id
12.1.36. xmlpipe_attr_bool
@@ -8850,7 +8846,7 @@
Author
Multi-value, optional.
Applies to xmlpipe2 source type only.
Syntax fully matches that of sql_attr_bool.
-
Example:
+
Example:
xmlpipe_attr_bool = is_deleted # will be packed to 1 bit
12.1.37. xmlpipe_attr_timestamp
@@ -8859,7 +8855,7 @@
Author
Multi-value, optional.
Applies to xmlpipe2 source type only.
Syntax fully matches that of sql_attr_timestamp.
-
Example:
+
Example:
xmlpipe_attr_timestamp = published
12.1.38. xmlpipe_attr_float
@@ -8868,7 +8864,7 @@
Author
Multi-value, optional.
Applies to xmlpipe2 source type only.
Syntax fully matches that of sql_attr_float.
-
that will constitute the MVA will be extracted, similar to how
sql_attr_multi parses
SQL column contents when 'field' MVA source type is specified.
-
Example:
+
Example:
xmlpipe_attr_multi = taglist
12.1.40. xmlpipe_attr_multi_64
@@ -8897,7 +8893,7 @@
Author
that will constitute the MVA will be extracted, similar to how
sql_attr_multi parses
SQL column contents when 'field' MVA source type is specified.
-
Example:
+
Example:
xmlpipe_attr_multi_64 = taglist
12.1.41. xmlpipe_attr_string
@@ -8909,7 +8905,7 @@
Author
This setting declares a string attribute tag in xmlpipe2 stream.
The contents of the specified tag will be parsed and stored as a string value.
-
Example:
+
Example:
xmlpipe_attr_string = subject
12.1.42. xmlpipe_attr_json
@@ -8922,7 +8918,7 @@
Author
XML tag are to be treated as a JSON document and stored into a Sphinx
index for later use. Refer to Section 12.1.24, “sql_attr_json”
for more details on the JSON attributes.
-
Example:
+
Example:
xmlpipe_attr_json = properties
12.1.43. xmlpipe_fixup_utf8
@@ -8939,7 +8935,7 @@
Author
UTF8 fixup feature lets you avoid that. When fixup is enabled,
Sphinx will preprocess the incoming stream before passing it to the
XML parser and replace invalid UTF-8 sequences with spaces.
-
Example:
+
Example:
xmlpipe_fixup_utf8 = 1
12.1.44. mssql_winauth
@@ -8953,7 +8949,7 @@
Author
authentication when connecting to MS SQL Server. Note that when running
searchd as a service, account user can differ
from the account you used to install the service.
-
Example:
+
Example:
mssql_winauth = 1
12.1.45. unpack_zlib
@@ -8967,7 +8963,7 @@
Author
using standard zlib algorithm (called deflate and also implemented by gunzip).
When indexing on a different box than the database, this lets you offload the database, and save on network traffic.
The feature is only available if zlib and zlib-devel were both available during build time.
-
Example:
+
Example:
unpack_zlib = col1
unpack_zlib = col2
@@ -8982,7 +8978,7 @@
Author
using modified zlib algorithm used by MySQL COMPRESS() and UNCOMPRESS() functions.
When indexing on a different box than the database, this lets you offload the database, and save on network traffic.
The feature is only available if zlib and zlib-devel were both available during build time.
-
data can not go over the buffer size. This option lets you control the buffer size,
both to limit indexer memory use, and to enable unpacking
of really long data fields if necessary.
-
Example:
+
Example:
unpack_mysqlcompress_maxsize = 1M
12.2. Index configuration options
@@ -9026,7 +9022,7 @@
Author
Index type setting lets you choose the needed type.
By default, plain local index type will be assumed.
-
.spp stores hit (aka posting, aka word occurrence) lists for each word ID;
.sps stores string attribute data.
+
.spe stores skip-lists to speed up doc-list filtering
-
Example:
+
Example:
path = /var/data/test1
12.2.4. docinfo
@@ -9138,7 +9135,7 @@
Author
However, such cases are infrequent, and docinfo defaults to "extern".
Refer to Section 3.3, “Attributes” for in-depth discussion
and RAM usage estimates.
-
Example:
+
Example:
docinfo = inline
12.2.5. mlock
@@ -9161,7 +9158,7 @@
Author
from root account, or be granted enough privileges otherwise.
If mlock() fails, a warning is emitted, but index continues
working.
-
Example:
+
Example:
mlock = 1
12.2.6. morphology
@@ -9265,8 +9262,8 @@
Author
lemmatize_en - apply English lemmatizer and pick a single root form (added in 2.2.1-beta);
lemmatize_de - apply German lemmatizer and pick a single root form (added in 2.2.1-beta);
lemmatize_ru_all - apply Russian lemmatizer and index all possible root forms (added in 2.1.1-beta);
-
lemmatize_en_all - apply Russian lemmatizer and index all possible root forms (added in 2.2.1-beta);
-
lemmatize_de_all - apply Russian lemmatizer and index all possible root forms (added in 2.2.1-beta);
+
lemmatize_en_all - apply English lemmatizer and index all possible root forms (added in 2.2.1-beta);
+
lemmatize_de_all - apply German lemmatizer and index all possible root forms (added in 2.2.1-beta);
stem_en - apply Porter's English stemmer;
stem_ru - apply Porter's Russian stemmer;
stem_enru - apply Porter's English and Russian stemmers;
@@ -9290,7 +9287,7 @@
Author
a matching entry in the dictionary, stemmers will not be applied at all.
Or in other words, wordforms can be
used to implement stemming exceptions.
-
Example:
+
Example:
morphology = stem_en, libstemmer_sv
12.2.7. dict
@@ -9359,7 +9356,7 @@
Author
on how many actual keywords match the given substring (in other
words, into how many keywords does the search term expand).
The maximum number of keywords matched is restricted by the
-expansion_limit
+expansion_limit
directive.
Essentially, keywords and CRC dictionaries represent the two
@@ -9368,7 +9365,7 @@
Author
top-speed worst-case searches (CRC dictionary), or only slightly
impact indexing time but sacrifice worst-case searching time when
the prefix expands into very many keywords (keywords dictionary).
-
Example:
+
Example:
dict = keywords
12.2.8. index_sp
@@ -9406,7 +9403,7 @@
Author
PRE, TABLE, TBODY, TD, TFOOT, TH, THEAD, TR, and UL.
Both sentences and paragraphs increment the keyword position counter by 1.
-
Earlier versions than 2.1.1-beta only provided this feature for plain
@@ -9458,7 +9455,7 @@
Author
exactly as long as specified will be stemmed. So in order to avoid
stemming 3-character keywords, you should specify 4 for the value.
For more finely grained control, refer to wordforms feature.
-
Example:
+
Example:
min_stemming_len = 4
12.2.11. stopwords
@@ -9496,7 +9493,7 @@
Author
of the index, sorted by the keyword frequency, see --buildstops
and --buildfreqs switch in Section 7.1, “indexer command reference”.
Top keywords from that dictionary can usually be used as stopwords.
-
time it makes no sense to embed a 100 MB wordforms dictionary into a tiny
delta index. So there needs to be a size threshold, and embedded_limit
is that threshold.
-
Example:
+
Example:
embedded_limit = 32K
12.2.14. exceptions
@@ -9677,7 +9674,7 @@
Author
during indexing and searching respectively. Therefore, to pick up
changes in the file it's required to reindex and restart
searchd.
-
Only those words that are not shorter than this minimum will be indexed.
For instance, if min_word_len is 4, then 'the' won't be indexed, but 'they' will be.
-
Example:
+
Example:
min_word_len = 4
12.2.16. charset_table
@@ -9755,7 +9752,7 @@
Author
Starting with 2.2.3-beta, aliases "english" and "russian" are allowed at
control character mapping.
-
Example:
+
Example:
# default are English and Russian letters
charset_table = 0..9, A..Z->a..z, _, a..z, \
U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+451, U+451
@@ -9778,7 +9775,7 @@
Author
The syntax is the same as for charset_table,
but it's only allowed to declare characters, and not allowed to map them. Also,
the ignored characters must not be present in charset_table.
-
Example:
+
Example:
ignore_chars = U+AD
12.2.18. min_prefix_len
@@ -9808,7 +9805,7 @@
Author
$cl->Query ( "( keyword | keyword* ) other keywords" );
-
Example:
+
Example:
min_prefix_len = 3
12.2.19. min_infix_len
@@ -9830,7 +9827,7 @@
Author
There's no automatic way to rank perfect word matches higher
in an infix index, but the same tricks as with prefix indexes
can be applied.
-
Example:
+
Example:
min_infix_len = 3
12.2.20. max_substring_len
@@ -9866,7 +9863,7 @@
Author
and intentionally forbidden in that case. If required, you can still
limit the length of a substring that you search for in the application
code.
-
Example:
+
Example:
max_substring_len = 12
12.2.21. prefix_fields
@@ -9880,7 +9877,7 @@
Author
page contents. prefix_fields specifies what fields will be prefix-indexed;
all other fields will be indexed in normal mode. The value format is a
comma-separated list of field names.
-
Example:
+
Example:
prefix_fields = url, domain
12.2.22. infix_fields
@@ -9890,7 +9887,7 @@
Author
Similar to prefix_fields,
but lets you limit infix-indexing to given fields.
-
Example:
+
Example:
infix_fields = url, domain
12.2.23. ngram_len
@@ -9930,7 +9927,7 @@
Author
good results, thanks to phrase based ranking: it will pull closer phrase
matches (which in case of N-gram CJK words can mean closer multi-character
word matches) to the top.
-
Example:
+
Example:
ngram_len = 1
12.2.24. ngram_chars
@@ -9942,7 +9939,7 @@
Author
this list defines characters, sequences of which are subject to N-gram extraction.
Words comprised of other characters will not be affected by N-gram indexing
feature. The value format is identical to charset_table.
-
Example:
+
Example:
ngram_chars = U+3000..U+2FA1F
12.2.25. phrase_boundary
@@ -9968,7 +9965,7 @@
Author
Phrase boundary condition will be raised if and only if such character
is followed by a separator; this is to avoid abbreviations such as
S.T.A.L.K.E.R or URLs being treated as several phrases.
-
On phrase boundary, current word position will be additionally incremented
by this number. See phrase_boundary for details.
-
Example:
+
Example:
phrase_boundary_step = 100
12.2.27. html_strip
@@ -10015,7 +10012,7 @@
Author
There are no restrictions on tag names; ie. everything
that looks like a valid tag start, or end, or a comment
will be stripped.
-
Example:
+
Example:
html_strip = 1
12.2.28. html_index_attrs
@@ -10026,7 +10023,7 @@
Author
Specifies HTML markup attributes whose contents should be retained and indexed
even though other HTML markup is stripped. The format is per-tag enumeration of
indexable attributes, as shown in the example below.
-
Example:
+
Example:
html_index_attrs = img=alt,title; a=title;
12.2.29. html_remove_elements
@@ -10042,7 +10039,7 @@
Author
The value is a comma-separated list of element (tag) names whose
contents should be removed. Tag names are case insensitive.
-
Example:
+
Example:
html_remove_elements = style, script
12.2.30. local
@@ -10065,7 +10062,7 @@
Author
local indexes (refer to Section 12.2.31, “agent” for the details). However,
that creates redundant CPU and network load, and dist_threads
is now strongly suggested instead.
-
Example:
+
Example:
local = chunk1
local = chunk2
@@ -10121,7 +10118,7 @@
Author
(ie. sequentially or in parallel too) depends solely on the agent
configuration (ie. dist_threads directive). Master has no remote
control over that.
-
Example:
+
Example:
# config on box2
# sharding an index over 3 servers
agent = box2:9312:chunk2
@@ -10136,7 +10133,7 @@
Author
# sharding an index over 3 servers
agent = box1:9312:chunk2
agent = box2:9312:chunk3
-
Agent mirrors
+
Agent mirrors
New syntax added in 2.1.1-beta lets you define so-called agent mirrors
that can be used interchangeably when processing a search query. Master server
keeps track of mirror status (alive or dead) and response times, and does
@@ -10157,7 +10154,7 @@
Author
By default, all queries are routed to the best of the mirrors. The best one
is picked based on the recent statistics, as controlled by the
-ha_period_karma config directive.
+ha_period_karma config directive.
Master stores a number of metrics (total query count, error count, response
time, etc) recently observed for every agent. It groups those by time spans,
and karma is that time span length. The best agent mirror is then determined
@@ -10172,11 +10169,11 @@
Author
HA/LB logic.
When there are no queries, master sends a regular ping command every
-ha_ping_interval milliseconds
+ha_ping_interval milliseconds
in order to have some statistics and at least check, whether the remote
host is still alive. ha_ping_interval defaults to 1000 msec. Setting it to 0
disables pings and statistics will only be accumulated based on actual queries.
-
Example:
+
Example:
# sharding index over 4 servers total
# in just 2 chunks but with 2 failover mirrors for each chunk
# box1, box2 carry chunk1 as local
@@ -10199,10 +10196,10 @@
Author
is that the master will not open a new connection to the agent for
every query and then close it. Rather, it will keep a connection open and
attempt to reuse for the subsequent queries. The maximal number of such persistent connections per one agent host
-is limited by persistent_connections_limit option of searchd section.
+is limited by persistent_connections_limit option of searchd section.
Note, that you have to set the last one in something greater than 0 if you want to use persistent agent connections.
-Otherwise - when persistent_connections_limit is not defined, it assumes
+Otherwise - when persistent_connections_limit is not defined, it assumes
the zero num of persistent connections, and 'agent_persistent' acts exactly as simple 'agent'.
Persistent master-agent connections reduce TCP port pressure, and
@@ -10210,7 +10207,7 @@
Author
in workers=threads mode. In other modes, simple non-persistent connections
(i.e., one connection per operation) will be used, and a warning will show
up in the console.
-
Example:
+
Example:
agent_persistent = remotebox:9312:index2
12.2.33. agent_blackhole
@@ -10229,7 +10226,7 @@
Author
Also, all network errors on blackhole agents will be ignored.
The value format is completely identical to regular
agent directive.
-
successfully. If the timeout is reached but connect() does not complete,
and retries are enabled,
retry will be initiated.
-
Example:
+
Example:
agent_connect_timeout = 300
12.2.35. agent_query_timeout
@@ -10257,7 +10254,7 @@
Author
a remote agent equals to the sum of agent_connection_timeout and
agent_query_timeout. Queries will not be retried
if this timeout is reached; a warning will be produced instead.
-
Example:
+
Example:
agent_query_timeout = 10000 # our query can be long, allow up to 10 sec
12.2.36. preopen
@@ -10277,7 +10274,7 @@
Author
This directive does not affect indexer in any way,
it only affects searchd.
-
Example:
+
Example:
preopen = 1
12.2.37. inplace_enable
@@ -10308,7 +10305,7 @@
Author
This directive does not affect searchd in any way,
it only affects indexer.
-
Example:
+
Example:
inplace_enable = 1
12.2.38. inplace_hit_gap
@@ -10320,7 +10317,7 @@
Author
This directive does not affect searchd in any way,
it only affects indexer.
-
Example:
+
Example:
inplace_hit_gap = 1M
12.2.39. inplace_docinfo_gap
@@ -10332,7 +10329,7 @@
Author
This directive does not affect searchd in any way,
it only affects indexer.
-
Example:
+
Example:
inplace_docinfo_gap = 1M
12.2.40. inplace_reloc_factor
@@ -10344,7 +10341,7 @@
Author
This directive does not affect searchd in any way,
it only affects indexer.
-
Example:
+
Example:
inplace_reloc_factor = 0.1
12.2.41. inplace_write_factor
@@ -10356,7 +10353,7 @@
Author
This directive does not affect searchd in any way,
it only affects indexer.
-
Example:
+
Example:
inplace_write_factor = 0.1
12.2.42. index_exact_words
@@ -10370,7 +10367,7 @@
Author
enables exact form operator in the query language to work.
This impacts the index size and the indexing time. However, searching performance
is not impacted at all.
-
Example:
+
Example:
index_exact_words = 1
12.2.43. overshort_step
@@ -10381,7 +10378,7 @@
Author
This directive does not affect searchd in any way,
it only affects indexer.
-
Example:
+
Example:
overshort_step = 1
12.2.44. stopword_step
@@ -10392,7 +10389,7 @@
Author
This directive does not affect searchd in any way,
it only affects indexer.
-
Example:
+
Example:
stopword_step = 1
12.2.45. hitless_words
@@ -10427,7 +10424,7 @@
Author
hitless, "simon says hello world" will be converted to ("simon says" &
hello & world) query, matching all documents that contain "hello" and
"world" anywhere in the document, and also "simon says" as an exact phrase.
-
Example:
+
Example:
hitless_words = all
12.2.46. expand_keywords
@@ -10460,7 +10457,7 @@
Author
This directive does not affect indexer in any way,
it only affects searchd.
-
Example:
+
Example:
expand_keywords = 1
12.2.47. blend_chars
@@ -10499,7 +10496,7 @@
Author
so that multiple different blended characters could be normalized into
just one base form. This is useful when indexing multiple alternative
Unicode codepoints with equivalent glyphs.
-
Multi-value (an arbitrary number of attributes is allowed), optional.
Declares an unsigned 32-bit attribute.
Introduced in version 1.10-beta.
-
Example:
+
Example:
rt_attr_uint = gid
12.2.52. rt_attr_bool
@@ -10602,7 +10599,7 @@
Author
Multi-value (there might be multiple attributes declared), optional.
Declares a 1-bit unsigned integer attribute.
Introduced in version 2.1.2-release.
-
Example:
+
Example:
rt_attr_bool = available
12.2.53. rt_attr_bigint
@@ -10611,7 +10608,7 @@
Author
Multi-value (an arbitrary number of attributes is allowed), optional.
Declares a signed 64-bit attribute.
Introduced in version 1.10-beta.
-
Example:
+
Example:
rt_attr_bigint = guid
12.2.54. rt_attr_float
@@ -10620,7 +10617,7 @@
Author
Multi-value (an arbitrary number of attributes is allowed), optional.
Declares a single precision, 32-bit IEEE 754 format float attribute.
Introduced in version 1.10-beta.
-
Example:
+
Example:
rt_attr_float = gpa
12.2.55. rt_attr_multi
@@ -10629,7 +10626,7 @@
Author
Declares the UNSIGNED INTEGER (unsigned 32-bit) MVA attribute.
Multi-value (ie. there may be more than one such attribute declared), optional.
Applies to RT indexes only.
-
Example:
+
Example:
rt_attr_multi = my_tags
12.2.56. rt_attr_multi_64
@@ -10638,7 +10635,7 @@
Author
Declares the BIGINT (signed 64-bit) MVA attribute.
Multi-value (ie. there may be more than one such attribute declared), optional.
Applies to RT indexes only.
-
Example:
+
Example:
rt_attr_multi_64 = my_wide_tags
12.2.57. rt_attr_timestamp
@@ -10646,7 +10643,7 @@
Author
Timestamp attribute declaration.
Multi-value (an arbitrary number of attributes is allowed), optional.
Introduced in version 1.10-beta.
-
Example:
+
Example:
rt_attr_timestamp = date_added
12.2.58. rt_attr_string
@@ -10654,7 +10651,7 @@
Author
String attribute declaration.
Multi-value (an arbitrary number of attributes is allowed), optional.
Introduced in version 1.10-beta.
-
index. Essentially, this directive controls how exactly master does the
load balancing between the configured mirror agent nodes.
As of 2.1.1-beta, the following strategies are implemented:
-
Simple random balancing
ha_strategy = random
+
Simple random balancing
ha_strategy = random
The default balancing mode. Simple linear random distribution among the mirrors.
That is, equal selection probability are assigned to every mirror. Kind of similar
to round-robin (RR), but unlike RR, does not impose a strict selection order.
-
Adaptive randomized balancing
+
Adaptive randomized balancing
The default simple random strategy does not take mirror status, error rate,
and, most importantly, actual response latencies into account. So to accommodate
for heterogeneous clusters and/or temporary spikes in agent node load, we have
@@ -10726,7 +10723,7 @@
Author
ha_strategy = noerrors
Latency-weighted probabilities, but mirrors with worse errors/success ratio
are excluded from the selection.
-
Round-robin balancing
ha_strategy = roundrobin
Simple round-robin selection, that is, selecting the 1st mirror
+
Round-robin balancing
ha_strategy = roundrobin
Simple round-robin selection, that is, selecting the 1st mirror
in the list, then the 2nd one, then the 3rd one, etc, and then repeating
the process once the last mirror in the list is reached. Unlike with
the randomized strategies, RR imposes a strict querying order (1, 2, 3, ..,
@@ -10752,7 +10749,7 @@
Author
to index a current word pair or not.
bigram_freq_words lets you define a list of such keywords.
-
Example:
+
Example:
bigram_freq_words = the, a, you, i
12.2.62. bigram_index
@@ -10792,7 +10789,7 @@
Author
For most usecases, both_freq would be the best mode, but
your mileage may vary.
-
Example:
+
Example:
bigram_freq_words = both_freq
12.2.63. index_field_lengths
@@ -10804,7 +10801,7 @@
Author
When index_field_lengths is set to 1, indexer
will 1) create a respective length attribute for every full-text field,
-sharing the same name; 2) compute a field length (counted in keywords) for
+sharing the same name but with _len suffix; 2) compute a field length (counted in keywords) for
every document and store in to a respective attribute; 3) compute the per-index
averages. The lengths attributes will have a special TOKENCOUNT type, but their
values are in fact regular 32-bit integers, and their values are generally
@@ -10819,7 +10816,7 @@
Author
and its extension towards multiple fields, called BM25F. They require
per-document length and per-field lengths, respectively. Hence the additional
directive.
-
Example:
+
Example:
index_field_lengths = 1
12.2.64. regexp_filter
@@ -10856,7 +10853,7 @@
Author
installed in the system and Sphinx must be configured built with a
--with-re2 switch. Binary packages should come with RE2
builtin.
-
Example:
+
Example:
# index '13-inch' as '13inch'
regexp_filter = \b(\d+)\" => \1inch
@@ -10880,7 +10877,7 @@
Author
stopwords_unstemmed directive fixes that issue. When it's enabled,
stopwords are applied before stemming (and therefore to the original
word forms), and the tokens are stopped when token == stopword.
-
Example:
+
Example:
stopwords_unstemmed = 1
12.2.66. global_idf
@@ -10915,14 +10912,14 @@
Author
first, then converting those to .idf format using --buildidf,
then merging all .idf files across cluser using --mergeidf.
Refer to Section 7.4, “indextool command reference” for more information.
-
Example:
+
Example:
global_idf = /usr/local/sphinx/var/global.idf
12.2.67. rlp_context
RLP context configuration file. Mandatory if RLP is used.
Added in 2.2.1-beta.
-
Example:
+
Example:
rlp_context = /home/myuser/RLP/rlp-context.xml
12.2.68. ondisk_attrs
@@ -10941,7 +10938,7 @@
Author
Note that this option also affects RT indexes. When it is enabled, all atribute updates
will be disabled, and also all disk chunks of RT indexes will behave described above. However
inserting and deleting of docs from RT indexes is still possible with enabled ondisk_attrs.
-
Possible values:
+
Possible values:
0 - disabled and default value, all attributes are loaded in memory
(the normal behaviour of docinfo = extern)
@@ -10959,7 +10956,7 @@
Author
This option does not affect indexing in any way, it only requires daemon
restart.
-
Example:
+
Example:
ondisk_attrs = pool #keep pooled attributes on disk
12.3. indexer program configuration options
@@ -10985,7 +10982,7 @@
Author
and the database server can timeout. You can resolve that
either by raising timeouts on SQL server side or by lowering
mem_limit.
-
Example:
+
Example:
mem_limit = 256M
# mem_limit = 262144K # same, but in KB
# mem_limit = 268435456 # same, but in bytes
@@ -11008,7 +11005,7 @@
Author
(that's mostly limited by disk heads seek time). Limiting indexing I/O
to a fraction of that can help reduce search performance degradation
caused by indexing.
-
Example:
+
Example:
max_iops = 40
12.3.3. max_iosize
@@ -11024,14 +11021,14 @@
Author
by max_iops setting. At the time of this
writing, all I/O calls should be under 256 KB (default internal buffer size)
anyway, so max_iosize values higher than 256 KB must not affect anything.
-
Example:
+
Example:
max_iosize = 1048576
12.3.4. max_xmlpipe2_field
Maximum allowed field size for XMLpipe2 source type, bytes.
Optional, default is 2 MB.
-
Example:
+
Example:
max_xmlpipe2_field = 8M
12.3.5. write_buffer
@@ -11045,7 +11042,7 @@
Author
mem_limit. Note that several
(currently up to 4) buffers for different files will be allocated,
proportionally increasing the RAM usage.
-
Example:
+
Example:
write_buffer = 4M
12.3.6. max_file_field_buffer
@@ -11065,7 +11062,7 @@
Author
(for example) 2 MB in size, but max_file_field_buffer
value is 128 MB, peak buffer usage would still be only 2 MB. However,
files over 128 MB would be entirely skipped.
-
Example:
+
Example:
max_file_field_buffer = 128M
12.3.7. on_file_field_error
@@ -11097,7 +11094,7 @@
Author
when doing actual parsing work. So in case a file goes away
between these two open attempts, the document will still be
indexed.
-
Example:
+
Example:
on_file_field_errors = skip_document
12.3.8. lemmatizer_cache
@@ -11138,7 +11135,7 @@
Author
go with the small default 256 KB cache when pressed for memory, or spend
128 MB extra RAM and cache the entire dictionary for maximum indexing
performance.
-
Also you can use the 'syslog' as the file name. In this case the events will be sent to syslog daemon.
To use the syslog option the sphinx must be configured '--with-syslog' on building.
-
Example:
+
Example:
log = /var/log/searchd.log
12.4.3. query_log
@@ -11203,7 +11200,7 @@
Author
In this case all search queries will be sent to syslog daemon with LOG_INFO priority,
prefixed with '[query]' instead of timestamp.
To use the syslog option the sphinx must be configured '--with-syslog' on building.
-
Network client request read timeout, in seconds.
Optional, default is 5 seconds.
searchd will forcibly close the client connections which fail to send a query within this timeout.
-
Example:
+
Example:
read_timeout = 1
12.4.6. client_timeout
Maximum time to wait between requests (in seconds) when using
persistent connections. Optional, default is five minutes.
-
Example:
+
Example:
client_timeout = 3600
12.4.7. max_children
@@ -11246,7 +11243,7 @@
Author
searches running, at all times. When the limit is reached, additional incoming
clients are dismissed with temporarily failure (SEARCHD_RETRY) status code
and a message stating that the server is maxed out.
-
Example:
+
Example:
max_children = 10
12.4.8. pid_file
@@ -11261,7 +11258,7 @@
Author
of searchd; to stop searchd;
to notify it that it should rotate the indexes. Can also be used for
different external automation scripts.
-
Example:
+
Example:
pid_file = /var/run/searchd.pid
12.4.9. seamless_rotate
@@ -11300,7 +11297,7 @@
Author
memory usage during the rotation (because both old and new copies of
.spa/.spi/.spm data need to be in RAM while
preloading new copy). Average usage stays the same.
-
Example:
+
Example:
seamless_rotate = 1
12.4.10. preopen_indexes
@@ -11323,14 +11320,14 @@
Author
They also make searchd use more file
handles. In most scenarios it's therefore preferred and
recommended to preopen indexes.
-
Example:
+
Example:
preopen_indexes = 1
12.4.11. unlink_old
Whether to unlink .old index copies on successful rotation.
Optional, default is 1 (do unlink).
-
Example:
+
Example:
unlink_old = 0
12.4.12. attr_flush_period
@@ -11346,7 +11343,7 @@
Author
between those intervals is set with attr_flush_period, in seconds.
It defaults to 0, which disables the periodic flushing, but flushing will
still occur at normal shut-down.
-
Example:
+
Example:
attr_flush_period = 900 # persist updates to disk every 15 minutes
12.4.13. max_packet_size
@@ -11356,7 +11353,7 @@
Author
Only used for internal sanity checks, does not directly affect RAM use or performance.
Optional, default is 8M.
Introduced in version 0.9.9-rc1.
-
Example:
+
Example:
max_packet_size = 32M
12.4.14. mva_updates_pool
@@ -11374,7 +11371,7 @@
Author
In the meantime, MVA updates are intended to be used as a measure to quickly
catchup with latest changes in the database until the next index rebuild;
not as a persistent storage mechanism.
-
Example:
+
Example:
mva_updates_pool = 16M
12.4.15. max_filters
@@ -11383,7 +11380,7 @@
Author
Only used for internal sanity checks, does not directly affect RAM use or performance.
Optional, default is 256.
Introduced in version 0.9.9-rc1.
-
Example:
+
Example:
max_filters = 1024
12.4.16. max_filter_values
@@ -11392,7 +11389,7 @@
Author
Only used for internal sanity checks, does not directly affect RAM use or performance.
Optional, default is 4096.
Introduced in version 0.9.9-rc1.
-
Example:
+
Example:
max_filter_values = 16384
12.4.17. listen_backlog
@@ -11406,7 +11403,7 @@
Author
fail with "connection refused" message. listen_backlog directive
controls the length of the connection queue. Non-Windows builds
should work fine with the default value.
-
Example:
+
Example:
listen_backlog = 20
12.4.18. read_buffer
@@ -11418,7 +11415,7 @@
Author
two associated read buffers (one for document list and one for
hit list). This setting lets you control their sizes, increasing
per-query RAM use, but possibly decreasing IO time.
-
Example:
+
Example:
read_buffer = 1M
12.4.19. read_unhinted
@@ -11434,7 +11431,7 @@
Author
unhinted read size, but raising it for smaller lists. It will
not affect RAM use because read buffer will be already
allocated. So it should be not greater than read_buffer.
-
Example:
+
Example:
read_unhinted = 32K
12.4.20. max_batch_queries
@@ -11445,7 +11442,7 @@
Author
Makes searchd perform a sanity check of the amount of the queries
submitted in a single batch when using multi-queries.
Set it to 0 to skip the check.
-
Example:
+
Example:
max_batch_queries = 256
12.4.21. subtree_docs_cache
@@ -11456,7 +11453,7 @@
Author
Limits RAM usage of a common subtree optimizer (see Section 5.11, “Multi-queries”).
At most this much RAM will be spent to cache document entries per each query.
Setting the limit to 0 disables the optimizer.
-
Example:
+
Example:
subtree_docs_cache = 8M
12.4.22. subtree_hits_cache
@@ -11467,7 +11464,7 @@
Author
Limits RAM usage of a common subtree optimizer (see Section 5.11, “Multi-queries”).
At most this much RAM will be spent to cache keyword occurrences (hits) per each query.
Setting the limit to 0 disables the optimizer.
-
Example:
+
Example:
subtree_hits_cache = 16M
12.4.23. workers
@@ -11507,7 +11504,7 @@
Author
Threads mode was implemented along with RT backend and is required
to use RT indexes. (Regular disk-based indexes work in all the
available modes.)
-
Example:
+
Example:
workers = threads
12.4.24. dist_threads
@@ -11541,7 +11538,7 @@
Author
Up to dist_threads threads are be created to process
those files. That speeds up snippet extraction when the total amount
of document data to process is significant (hundreds of megabytes).
-
Example:
+
Example:
index dist_test
{
type = distributed
@@ -11580,7 +11577,7 @@
Author
Otherwise, the default path, which in most cases is the same as working folder, may point to the
folder with no write access (for example, /usr/local/var/data). In this case, the searchd
will not start at all.
-
Example:
+
Example:
binlog_path = # disable logging
binlog_path = /var/data # /var/data/binlog.001 etc will be created
@@ -11612,7 +11609,7 @@
Author
cases, the default hybrid mode 2 provides a nice balance of speed
and safety, with full RT index data protection against daemon crashes,
and some protection against hardware ones.
-
Example:
+
Example:
binlog_flush = 1 # ultimate safety, low speed
12.4.27. binlog_max_log_size
@@ -11624,7 +11621,7 @@
Author
A new binlog file will be forcibly opened once the current binlog file
reaches this limit. This achieves a finer granularity of logs and can yield
more efficient binlog disk usage under certain borderline workloads.
-
Example:
+
Example:
binlog_max_log_size = 16M
12.4.28. snippets_file_prefix
@@ -11648,7 +11645,7 @@
Author
This might be useful, for instance, when the document storage locations
(be those local storage or NAS mountpoints) are inconsistent across the servers.
-
Example:
+
Example:
snippets_file_prefix = /mnt/common/server1/
12.4.29. collation_server
@@ -11660,7 +11657,7 @@
Author
Specifies the default collation used for incoming requests.
The collation can be overridden on a per-query basis.
Refer to Section 5.12, “Collations” section for the list of available collations and other details.
-
Example:
+
Example:
collation_server = utf8_ci
12.4.30. collation_libc_locale
@@ -11671,23 +11668,10 @@
Author
Specifies the libc locale, affecting the libc-based collations.
Refer to Section 5.12, “Collations” section for the details.
-
Example:
+
Example:
collation_libc_locale = fr_FR
-
12.4.31. plugin_dir
-
-Trusted location for the dynamic libraries (UDFs).
-Optional, default is empty (no location).
-Introduced in version 2.0.1-beta.
-
-Specifies the trusted directory from which the
-UDF libraries can be loaded. Requires
-workers = thread to take effect.
-
A server version string to return via MySQL protocol.
Optional, default is empty (return Sphinx version).
@@ -11703,10 +11687,10 @@
Author
mysql_version_string directive and have searchd
report a different version to clients connecting over MySQL protocol.
(By default, it reports its own version.)
-
Example:
+
Example:
mysql_version_string = 5.0.37
-
12.4.33. rt_flush_period
+
12.4.32. rt_flush_period
RT indexes RAM chunk flush check period, in seconds.
Optional, default is 10 hours.
@@ -11718,10 +11702,10 @@
Author
periodic flush checks, and eligible RAM chunks can get saved,
enabling consequential binlog cleanup. See Section 4.4, “Binary logging”
for more details.
-
with upto 250 levels, 150K for upto 700 levels, etc. If the stack size limit
is not met, searchd fails the query and reports
the required stack size in the error message.
-
Example:
+
Example:
thread_stack = 256K
-
12.4.35. expansion_limit
+
12.4.34. expansion_limit
The maximum number of expanded keywords for a single wildcard.
Optional, default is 0 (no limit).
@@ -11761,10 +11745,10 @@
Author
of such expansions. Setting expansion_limit = N
restricts expansions to no more than N of the most frequent
matching keywords (per each wildcard in the query).
-
Example:
+
Example:
expansion_limit = 16
-
12.4.36. watchdog
+
12.4.35. watchdog
Threaded server watchdog.
Optional, default is 1 (watchdog enabled).
@@ -11777,10 +11761,10 @@
Author
process that monitors the main server process, and automatically
restarts the latter in case of abnormal termination. Watchdog
is enabled by default.
-
Example:
+
Example:
watchdog = 0 # disable watchdog
-
12.4.37. prefork_rotation_throttle
+
12.4.36. prefork_rotation_throttle
Delay between restarting preforked children on index rotation, in milliseconds.
Optional, default is 0 (no delay).
@@ -11799,10 +11783,10 @@
Author
there are 30 children, then the last one would only be actually
restarted 1.5 seconds (50*30=1500 milliseconds) after
the "rotation finished" message in the searchd event log.
-
Example:
+
Example:
prefork_rotation_throttle = 50 # throttle children restarts by 50 msec each
-
12.4.38. sphinxql_state
+
12.4.37. sphinxql_state
Path to a file where current SphinxQL state will be serialized.
Available since version 2.1.1-beta.
@@ -11812,10 +11796,10 @@
Author
If you load UDF functions, but Sphinx crashes, when it
gets (automatically) restarted, your UDF and global variables will no longer be available;
using persistent state helps a graceful recovery with no such surprises.
-
Example:
+
Example:
sphinxql_state = uservars.sql
-
12.4.39. ha_ping_interval
+
12.4.38. ha_ping_interval
Interval between agent mirror pings, in milliseconds.
Optional, default is 1000.
@@ -11828,10 +11812,10 @@
Author
by this directive.
To disable pings, set ha_ping_interval to 0.
-
Example:
+
Example:
ha_ping_interval = 0
-
12.4.40. ha_period_karma
+
12.4.39. ha_period_karma
Agent mirror statistics window size, in seconds.
Optional, default is 60.
@@ -11853,10 +11837,10 @@
The maximum # of simultaneous persistent connections to remote persistent agents.
Each time connecting agent defined under 'agent_persistent' we try to reuse existing connection (if any), or connect and save the connection for the future.
@@ -11864,10 +11848,10 @@
Author
when all of them are busy). This very directive limits the number. It affects the num of connections to each agent's host, across all distributed indexes.
It is reasonable to set the value equal or less than max_children option of the agents.
-
Example:
+
Example:
persistent_connections_limit = 29 # assume that each host of agents has max_children = 30 (or 29).
-
12.4.42. rt_merge_iops
+
12.4.41. rt_merge_iops
A maximum number of I/O operations (per second) that the RT chunks merge thread is allowed to start.
Optional, default is 0 (no limit). Added in 2.1.1-beta.
@@ -11877,10 +11861,10 @@
Author
RT optimization activity will not generate more disk iops (I/Os per second)
than the configured limit. Modern SATA drives can perform up to around 100 I/O operations per
second, and limiting rt_merge_iops can reduce search performance degradation caused by merging.
-
Example:
+
Example:
rt_merge_iops = 40
-
12.4.43. rt_merge_maxiosize
+
12.4.42. rt_merge_maxiosize
A maximum size of an I/O operation that the RT chunks merge
thread is allowed to start.
@@ -11890,14 +11874,14 @@
Author
This directive lets you throttle down the I/O impact arising from
the OPTIMIZE statements. I/Os bigger than this limit will be
broken down into 2 or more I/Os, which will then be accounted as separate I/Os
-with regards to the rt_merge_iops
+with regards to the rt_merge_iops
limit. Thus, it is guaranteed that all the optimization activity will not
generate more than (rt_merge_iops * rt_merge_maxiosize) bytes of disk I/O
per second.
-
Example:
+
Example:
rt_merge_maxiosize = 1M
-
12.4.44. predicted_time_costs
+
12.4.43. predicted_time_costs
Costs for the query time prediction model, in nanoseconds.
Optional, default is "doc=64, hit=48, skip=2048, match=64" (without the quotes).
@@ -11944,10 +11928,10 @@
Author
is somewhat more error prone.) It is not necessary to specify all 4 costs at once,
as the missed one will take the default values. However, we strongly suggest
to specify all of them, for readability.
-
searchd --stopwait wait time, in seconds.
Optional, default is 3 seconds.
@@ -11958,10 +11942,10 @@
Author
flushing attributes and updating binlog. And it requires some time.
searchd --stopwait will wait up to shutdown_time seconds for daemon to
finish its jobs. Suitable time depends on your index size and load.
-
Example:
+
Example:
shutdown_timeout = 5 # wait for up to 5 seconds
-
12.4.46. ondisk_attrs_default
+
12.4.45. ondisk_attrs_default
Instance-wide defaults for ondisk_attrs
directive. Optional, default is 0 (all attributes are loaded in memory). This
@@ -11969,32 +11953,32 @@
Author
served by this copy of searchd. Per-index directives take precedence, and will
overwrite this instance-wide default value, allowing for fine-grain control.
-
12.4.47. query_log_min_msec
+
12.4.46. query_log_min_msec
Limit (in milliseconds) that prevents the query from being written to the query log.
Optional, default is 0 (all queries are written to the query log). This directive
specifies that only queries with execution times that exceed the specified limit will be logged.
-
12.4.48. agent_connect_timeout
+
12.4.47. agent_connect_timeout
Instance-wide defaults for agent_connect_timeout parameter.
The last defined in distributed (network) indexes.
-
12.4.49. agent_query_timeout
+
12.4.48. agent_query_timeout
Instance-wide defaults for agent_query_timeout parameter.
The last defined in distributed (network) indexes, or also may be overrided per-query using OPTION clause.
-
12.4.50. agent_retry_count
+
12.4.49. agent_retry_count
Integer, specifies how many times sphinx will try to connect and query remote agents in distributed index before reporting
fatal query error. Default is 0 (i.e. no retries). This value may be also specified on per-query basis using
'OPTION retry_count=XXX' clause. If per-query option exists, it will override the one specified in config.
-
12.4.51. agent_retry_delay
+
12.4.50. agent_retry_delay
Integer, in milliseconds. Specifies the delay sphinx rest before retrying to query a remote agent in case it fails.
-The value has sense only if non-zero agent_retry_count
+The value has sense only if non-zero agent_retry_count
or non-zero per-query OPTION retry_count specified. Default is 500. This value may be also specified
on per-query basis using 'OPTION retry_delay=XXX' clause. If per-query option exists, it will override the one specified in config.
@@ -12010,7 +11994,7 @@
Author
the base dictionary path. File names are hardcoded and specific to a given lemmatizer;
the Russian lemmatizer uses ru.pak dictionary file. The dictionaries can be obtained
from the Sphinx website.
-
Example:
+
Example:
lemmatizer_base = /usr/local/share/sphinx/dicts/
12.5.2. on_json_attr_error
@@ -12023,7 +12007,7 @@
Author
By default, JSON format errors are ignored (ignore_attr) and
the indexer tool will just show a warning. Setting this option to fail_index
will rather make indexing fail at the first JSON format error.
-
Example:
+
Example:
on_json_attr_error = ignore_attr
12.5.3. json_autoconv_numbers
@@ -12037,7 +12021,7 @@
Author
of strings; if the option is 0, such values will be indexed as strings.
This conversion applies to any data source, that is, JSON attributes originating
from either SQL or XMLpipe2 sources will all be affected.
-
Example:
+
Example:
json_autoconv_numbers = 1
12.5.4. json_autoconv_keynames
@@ -12051,21 +12035,21 @@
Author
will be automatically brought to lower case when indexing.
This conversion applies to any data source, that is, JSON attributes originating
from either SQL or XMLpipe2 sources will all be affected.
-
Example:
+
Example:
json_autoconv_keynames = lowercase
12.5.5. rlp_root
Path to the RLP root folder. Mandatory if RLP is used.
Added in 2.2.1-beta.
-
Example:
+
Example:
rlp_root = /home/myuser/RLP
12.5.6. rlp_environment
RLP environment configuration file. Mandatory if RLP is used.
Added in 2.2.1-beta.
-
Do not set this value to more than 10Mb because sphinx splits large documents to 10Mb chunks before processing them by the RLP.
This option has effect only if morphology = rlp_chinese_batched is specified.
Added in 2.2.1-beta.
-
Example:
+
Example:
rlp_max_batch_size = 100k
12.5.8. rlp_max_batch_docs
@@ -12082,54 +12066,80 @@
Author
Maximum number of documents batched before processing them by the RLP. Optional, default is 50.
This option has effect only if morphology = rlp_chinese_batched is specified.
Added in 2.2.1-beta.
-
Example:
+
Example:
rlp_max_batch_docs = 100
+
+
12.5.9. plugin_dir
+
+Trusted location for the dynamic libraries (UDFs).
+Optional, default is empty (no location).
+Introduced in version 2.0.1-beta.
+
+Specifies the trusted directory from which the
+UDF libraries can be loaded. Requires
+workers = thread to take effect.
+