Skip to content

Commit

Permalink
fixed index_exact_words different checks on indexing and loading inde…
Browse files Browse the repository at this point in the history
…x at daemon; fixed Github #2661; added warning about morphology_skip_fields used without expand_keywords option; fixed Github dev#318
  • Loading branch information
tomatolog committed Jan 17, 2024
1 parent 5a5abdb commit 75f5142
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 3 deletions.
6 changes: 5 additions & 1 deletion src/indexer.cpp
Expand Up @@ -1034,12 +1034,16 @@ bool DoIndex ( const CSphConfigSection & hIndex, const char * szIndexName, const
fprintf ( stdout, "WARNING: table '%s': no morphology or wordforms, index_exact_words=1 has no effect, ignoring\n", szIndexName );
}

if ( tDictSettings.m_bWordDict && pDict->HasMorphology() && ( tSettings.RawMinPrefixLen() || tSettings.m_iMinInfixLen ) && !tSettings.m_bIndexExactWords )
if ( !tSettings.m_bIndexExactWords && ForceExactWords ( tDictSettings.m_bWordDict, pDict->HasMorphology(), tSettings.RawMinPrefixLen(), tSettings.m_iMinInfixLen, pDict->GetSettings().m_sMorphFields.IsEmpty() ) )
{
tSettings.m_bIndexExactWords = true;
fprintf ( stdout, "WARNING: table '%s': dict=keywords and prefixes and morphology enabled, forcing index_exact_words=1\n", szIndexName );
}

bool bExpandExact = ( tSettings.m_bIndexExactWords && ( tMutableSettings.m_iExpandKeywords & KWE_EXACT )==KWE_EXACT );
if ( !pDict->GetSettings().m_sMorphFields.IsEmpty() && !bExpandExact )
fprintf ( stdout, "WARNING: table '%s': morphology_skip_fields set, consider enable expand_keywords\n", szIndexName );

Tokenizer::AddToMultiformFilterTo ( pTokenizer, pDict->GetMultiWordforms () );

// bigram filter
Expand Down
7 changes: 5 additions & 2 deletions src/indexsettings.cpp
Expand Up @@ -1803,8 +1803,7 @@ bool sphFixupIndexSettings ( CSphIndex * pIndex, const CSphConfigSection & hInde
dWarnings.Add ( "no morphology, index_exact_words=1 has no effect, ignoring" );
}

if ( pDict->GetSettings().m_bWordDict && pDict->HasMorphology() &&
( tSettings.RawMinPrefixLen() || tSettings.m_iMinInfixLen || !pDict->GetSettings().m_sMorphFields.IsEmpty() ) && !tSettings.m_bIndexExactWords )
if ( !tSettings.m_bIndexExactWords && ForceExactWords ( pDict->GetSettings().m_bWordDict, pDict->HasMorphology(), tSettings.RawMinPrefixLen(), tSettings.m_iMinInfixLen, pDict->GetSettings().m_sMorphFields.IsEmpty() ) )
{
tSettings.m_bIndexExactWords = true;
pIndex->Setup ( tSettings );
Expand All @@ -1815,6 +1814,10 @@ bool sphFixupIndexSettings ( CSphIndex * pIndex, const CSphConfigSection & hInde
return true;
}

bool ForceExactWords ( bool bWordDict, bool bHasMorphology, int iMinPrefixLen, int iMinInfixLen, bool bMorphFieldsEmpty )
{
return ( bWordDict && bHasMorphology && ( iMinPrefixLen || iMinInfixLen || !bMorphFieldsEmpty ) );
}

static RtTypedAttr_t g_dTypeNames[] =
{
Expand Down
2 changes: 2 additions & 0 deletions src/indexsettings.h
Expand Up @@ -464,4 +464,6 @@ void SaveDictionarySettings ( JsonEscapedBuilder& tOut, const DictRefPtr_c& pDic
void SetDefaultAttrEngine ( AttrEngine_e eEngine );
AttrEngine_e GetDefaultAttrEngine();

bool ForceExactWords ( bool bWordDict, bool bHasMorphology, int iMinPrefixLen, int iMinInfixLen, bool bMorphFieldsEmpty );

#endif // _indexsettings_

0 comments on commit 75f5142

Please sign in to comment.