packages feed

full-text-search-0.2.2.3: full-text-search.cabal

cabal-version: 3.0

name: full-text-search
version: 0.2.2.3
synopsis: In-memory full text search engine

description:
  An in-memory full text search engine library. It lets you
  run full-text queries on a collection of your documents.

  Features:

  * Keyword queries and auto-complete\/auto-suggest queries.

  * Can search over any type of \"document\".
    (You explain how to extract search terms from them.)

  * Supports documents with multiple fields
    (e.g. title, body)

  * Supports documents with non-term features
    (e.g. quality score, page rank)

  * Uses the state of the art BM25F ranking function

  * Adjustable ranking parameters (including field weights
    and non-term feature scores)

  * In-memory but quite compact. It does not keep a copy of
    your original documents.

  * Quick incremental index updates, making it possible to
    keep your text search in-sync with your data.

  It is independent of the document type, so you have to
  write the document-specific parts: extracting search terms
  and any stop words, case-normalisation or stemming. This
  is quite easy using libraries such as
  <https://hackage.haskell.org/package/tokenize tokenize> and
  <https://hackage.haskell.org/package/snowball snowball>.

  The source package includes a demo to illustrate how to
  use the library. The demo is a simplified version of how
  the library is used in the
  <https://hackage.haskell.org/package/hackage-server hackage-server>
  where it provides the backend for the package search feature.

bug-reports:         https://github.com/well-typed/full-text-search/issues
license:             BSD-3-Clause
license-file:        LICENSE
author:              Duncan Coutts
maintainer:          Duncan Coutts <duncan@well-typed.com>,
                     Adam Gundry <adam@well-typed.com>
copyright:           2013-2014 Duncan Coutts, 2014 Well-Typed LLP,
                     2014-2023 IRIS Connect Ltd.
category:            Data, Text, Search
build-type:          Simple
extra-doc-files:     changelog

tested-with:         GHC ==9.2.8 || ==9.4.8 || ==9.6.6 || ==9.8.2 || ==9.10.1 || ==9.12.1

source-repository head
  type:              git
  location:          git@github.com:well-typed/full-text-search.git

flag build-search-demo
  default:           False
  description:       Build a little program illustrating the use of the library
  manual:            True

common base-deps
  build-depends:       base       >=4.16 && <4.22,
                       array      >=0.4  && <0.6,
                       vector     >=0.11 && <0.14,
                       containers >=0.4  && <0.8,
                       text       >=0.11 && <2.2

library
  import:              base-deps
  exposed-modules:     Data.SearchEngine,
                       Data.SearchEngine.BM25F
  other-modules:       Data.SearchEngine.Types,
                       Data.SearchEngine.Update,
                       Data.SearchEngine.Query,
                       Data.SearchEngine.Autosuggest,
                       Data.SearchEngine.SearchIndex,
                       Data.SearchEngine.DocFeatVals,
                       Data.SearchEngine.TermBag,
                       Data.SearchEngine.DocTermIds,
                       Data.SearchEngine.DocIdSet
  hs-source-dirs:      src
  other-extensions:    BangPatterns,
                       NamedFieldPuns,
                       RecordWildCards,
                       GeneralizedNewtypeDeriving,
                       ScopedTypeVariables
  default-language:    Haskell2010
  ghc-options:         -Wall -funbox-strict-fields


executable search-demo
  main-is:             Main.hs
  other-modules:       PackageSearch
                       ExtractNameTerms
                       ExtractDescriptionTerms
                       PackageIndexUtils
                       -- support code for package descriptions:
                       HaddockHtml
                       HaddockLex
                       HaddockParse
                       HaddockTypes
  hs-source-dirs:      demo
  if !flag(build-search-demo)
    buildable:         False
  else
    build-depends:     full-text-search,
                       base,
                       text,
                       containers,
                       array,
                       tokenize      >= 0.1  && <0.4,
                       snowball      >= 1.0  && <1.1,
                       transformers  >= 0.5  && <0.6,
                       split         >= 0.2  && <0.3,
                       Cabal         >= 1.14 && <3.15,
                       bytestring    >= 0.12 && <0.13,
                       filepath      >= 1.5  && <1.6,
                       directory     >= 1.3  && <1.5,
                       tar           >= 0.6  && <0.7,
                       time          >= 1.14 && <1.15,
                       mtl           >= 2.2  && <2.4
  build-tool-depends:  alex:alex, happy:happy
  default-language:    Haskell2010
  other-extensions:    GeneralizedNewtypeDeriving
  ghc-options:         -Wall

test-suite qc-props
  import:              base-deps
  type:                exitcode-stdio-1.0
  main-is:             Main.hs
  hs-source-dirs:      src, tests
  build-depends:       QuickCheck       ==2.*,
                       tasty            >=0.8,
                       tasty-quickcheck >=0.8
  other-modules:       Test.Data.SearchEngine.TermBag,
                       Test.Data.SearchEngine.DocIdSet,
                       Data.SearchEngine.DocTermIds,
                       Data.SearchEngine.DocIdSet,
                       Data.SearchEngine.TermBag
  default-language:    Haskell2010
  ghc-options:         -Wall