anchor.diff:  open FlexSearch.Api.Types
   open FlexSearch.Core.Index
   open FlexSearch.Core
  +open FlexSearch.Utility.DataType
   
   open org.apache.lucene.analysis
   open org.apache.lucene.analysis.core
  
positive.code:                     | 1 -> Some(new TermQuery(new Term(flexIndexField.FieldName, terms.[0]))  :> Query)
                      | _ ->
                          // Generate boolean query
                          let boolQuery = new BooleanQuery()
                          for term in terms do
                              boolQuery.add(new BooleanClause(new TermQuery(new Term(flexIndexField.FieldName, term)), BooleanClause.Occur.MUST))
                          Some(boolQuery :> Query)
  
  
  
negative.code:             for i in 0 .. flexIndex.Shards.Length - 1 do
                  let searcher = (flexIndex.Shards.[i].NRTManager :> ReferenceManager).acquire() :?> IndexSearcher
                  indexSearchers.Add(searcher)
              
              // Each thread only works on a separate part of the array and as no parts are shared across
              // multiple threads the belows variables are thread safe. The cost of using blockingcollection vs 
              // array per search is high
              let topDocsCollection: TopDocs array = Array.zeroCreate indexSearchers.Count
              let searchCount: int array = Array.zeroCreate indexSearchers.Count
  
              let sort =
                  match search.OrderBy with
                  | null -> Sort.RELEVANCE
  