diff options
author | Alan Pearce | 2025-03-06 21:53:37 +0100 |
---|---|---|
committer | Alan Pearce | 2025-03-06 21:59:25 +0100 |
commit | 24e3fc96ce2c96401155b86c6bfb6a6fb2e322f8 (patch) | |
tree | 7cf43762a36d3df8c0375378e44e88e96bf2b79e | |
parent | 839cd807ccd1c2c2d4048c5a892af19b08e5270a (diff) | |
download | searchix-24e3fc96ce2c96401155b86c6bfb6a6fb2e322f8.tar.lz searchix-24e3fc96ce2c96401155b86c6bfb6a6fb2e322f8.tar.zst searchix-24e3fc96ce2c96401155b86c6bfb6a6fb2e322f8.zip |
feat: improve relevance with compound words
Fixes: https://todo.sr.ht/~alanpearce/searchix/8 Fixes: https://todo.sr.ht/~alanpearce/searchix/10
-rw-r--r-- | internal/index/indexer.go | 3 | ||||
-rw-r--r-- | internal/index/search.go | 16 |
2 files changed, 6 insertions, 13 deletions
diff --git a/internal/index/indexer.go b/internal/index/indexer.go index 188224c..b74c155 100644 --- a/internal/index/indexer.go +++ b/internal/index/indexer.go @@ -19,6 +19,7 @@ import ( "github.com/blevesearch/bleve/v2/analysis/analyzer/keyword" "github.com/blevesearch/bleve/v2/analysis/analyzer/simple" "github.com/blevesearch/bleve/v2/analysis/analyzer/web" + "github.com/blevesearch/bleve/v2/analysis/lang/en" "github.com/blevesearch/bleve/v2/analysis/token/camelcase" "github.com/blevesearch/bleve/v2/analysis/token/porter" "github.com/blevesearch/bleve/v2/analysis/tokenizer/letter" @@ -82,7 +83,7 @@ func createIndexMapping() (mapping.IndexMapping, error) { keywordFieldMapping.Analyzer = simple.Name nameMapping := bleve.NewTextFieldMapping() - nameMapping.Analyzer = simple.Name + nameMapping.Analyzer = en.AnalyzerName nameMapping.IncludeTermVectors = true nameMapping.Store = false diff --git a/internal/index/search.go b/internal/index/search.go index a62f484..b960c75 100644 --- a/internal/index/search.go +++ b/internal/index/search.go @@ -140,16 +140,11 @@ func (index *ReadIndex) Search( query := bleve.NewBooleanQuery() // match the user's query in any field ... - userQuery := bleve.NewMatchQuery(keyword) - userQuery.Analyzer = "option_name" - - userQueryLoc := bleve.NewMatchQuery(keyword) - userQueryLoc.Analyzer = "loc" - userQueryLoc.SetBoost(2) - query.AddMust(bleve.NewDisjunctionQuery( - userQuery, - userQueryLoc, + bleve.NewTermQuery(keyword), + bleve.NewPrefixQuery(keyword), + bleve.NewMatchPhraseQuery(keyword), + bleve.NewMatchQuery(keyword), )) if source != nil { @@ -166,17 +161,14 @@ func (index *ReadIndex) Search( programsQuery := bleve.NewMatchQuery(keyword) programsQuery.SetField("Programs") - programsQuery.Analyzer = "keyword_single" query.AddShould(programsQuery) attrQuery := bleve.NewMatchQuery(keyword) attrQuery.SetField("Attribute") - attrQuery.Analyzer = "keyword_single" query.AddShould(attrQuery) nameLiteralQuery := bleve.NewMatchQuery(keyword) nameLiteralQuery.SetField("Name") - nameLiteralQuery.Analyzer = "keyword_single" query.AddShould(nameLiteralQuery) search := bleve.NewSearchRequest(query) |