Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
| {-# LANGUAGE FlexibleContexts #-} | |
| {-# LANGUAGE FlexibleInstances #-} | |
| {-# LANGUAGE GeneralizedNewtypeDeriving #-} | |
| {-# LANGUAGE MultiParamTypeClasses #-} | |
| {-# LANGUAGE NamedFieldPuns #-} | |
| {-# LANGUAGE OverloadedStrings #-} | |
| {-# LANGUAGE RecordWildCards #-} | |
| {-# LANGUAGE UndecidableInstances #-} | |
| ------------------------------------------------------------------------------- | |
| -- | | |
| -- Module : Database.Bloodhound.Types | |
| -- Copyright : (C) 2014, 2018 Chris Allen | |
| -- License : BSD-style (see the file LICENSE) | |
| -- Maintainer : Chris Allen <cma@bitemyapp.com | |
| -- Stability : provisional | |
| -- Portability : RecordWildCards | |
| -- | |
| -- Data types for describing actions and data structures performed to interact | |
| -- with Elasticsearch. The two main buckets your queries against Elasticsearch | |
| -- will fall into are 'Query's and 'Filter's. 'Filter's are more like | |
| -- traditional database constraints and often have preferable performance | |
| -- properties. 'Query's support human-written textual queries, such as fuzzy | |
| -- queries. | |
| ------------------------------------------------------------------------------- | |
| module Database.V5.Bloodhound.Types | |
| ( defaultCache | |
| , defaultIndexSettings | |
| , defaultIndexDocumentSettings | |
| , mkSort | |
| , showText | |
| , unpackId | |
| , mkMatchQuery | |
| , mkMultiMatchQuery | |
| , mkBoolQuery | |
| , mkRangeQuery | |
| , mkQueryStringQuery | |
| , mkAggregations | |
| , mkTermsAggregation | |
| , mkTermsScriptAggregation | |
| , mkDateHistogram | |
| , mkCardinalityAggregation | |
| , mkDocVersion | |
| , mkStatsAggregation | |
| , mkExtendedStatsAggregation | |
| , docVersionNumber | |
| , toMissing | |
| , toTerms | |
| , toDateHistogram | |
| , toTopHits | |
| , omitNulls | |
| , BH(..) | |
| , runBH | |
| , BHEnv | |
| , bhServer | |
| , bhManager | |
| , bhRequestHook | |
| , mkBHEnv | |
| , MonadBH(..) | |
| , Version(..) | |
| , VersionNumber(..) | |
| , MaybeNA(..) | |
| , BuildHash(..) | |
| , Status(..) | |
| , Existence(..) | |
| , NullValue(..) | |
| , IndexSettings(..) | |
| , UpdatableIndexSetting(..) | |
| , IndexSettingsSummary(..) | |
| , AllocationPolicy(..) | |
| , Compression(..) | |
| , ReplicaBounds(..) | |
| , Bytes(..) | |
| , gigabytes | |
| , megabytes | |
| , kilobytes | |
| , FSType(..) | |
| , InitialShardCount(..) | |
| , NodeAttrFilter(..) | |
| , NodeAttrName(..) | |
| , CompoundFormat(..) | |
| , IndexTemplate(..) | |
| , Server(..) | |
| , Reply | |
| , EsResult(..) | |
| , EsResultFound(..) | |
| , EsError(..) | |
| , EsProtocolException(..) | |
| , IndexAlias(..) | |
| , IndexAliasName(..) | |
| , IndexAliasAction(..) | |
| , IndexAliasCreate(..) | |
| , IndexAliasSummary(..) | |
| , IndexAliasesSummary(..) | |
| , AliasRouting(..) | |
| , SearchAliasRouting(..) | |
| , IndexAliasRouting(..) | |
| , RoutingValue(..) | |
| , DocVersion | |
| , ExternalDocVersion(..) | |
| , VersionControl(..) | |
| , DocumentParent(..) | |
| , IndexDocumentSettings(..) | |
| , Query(..) | |
| , Search(..) | |
| , SearchType(..) | |
| , SearchResult(..) | |
| , ScrollId(..) | |
| , SearchHits(..) | |
| , TrackSortScores | |
| , From(..) | |
| , Size(..) | |
| , Source(..) | |
| , PatternOrPatterns(..) | |
| , Include(..) | |
| , Exclude(..) | |
| , Pattern(..) | |
| , ShardResult(..) | |
| , Hit(..) | |
| , HitFields(..) | |
| , Filter(..) | |
| , Seminearring(..) | |
| , BoolMatch(..) | |
| , Term(..) | |
| , GeoPoint(..) | |
| , GeoBoundingBoxConstraint(..) | |
| , GeoBoundingBox(..) | |
| , GeoFilterType(..) | |
| , Distance(..) | |
| , DistanceUnit(..) | |
| , DistanceType(..) | |
| , DistanceRange(..) | |
| , OptimizeBbox(..) | |
| , LatLon(..) | |
| , RangeValue(..) | |
| , RangeExecution(..) | |
| , LessThan(..) | |
| , LessThanEq(..) | |
| , GreaterThan(..) | |
| , GreaterThanEq(..) | |
| , LessThanD(..) | |
| , LessThanEqD(..) | |
| , GreaterThanD(..) | |
| , GreaterThanEqD(..) | |
| , Regexp(..) | |
| , RegexpFlags(..) | |
| , RegexpFlag(..) | |
| , FieldName(..) | |
| , ScriptFields(..) | |
| , ScriptFieldName | |
| , ScriptFieldValue | |
| , Script(..) | |
| , ScriptLanguage(..) | |
| , ScriptInline(..) | |
| , ScriptId(..) | |
| , ScriptParams(..) | |
| , ScriptParamName | |
| , ScriptParamValue | |
| , IndexName(..) | |
| , IndexSelection(..) | |
| , NodeSelection(..) | |
| , NodeSelector(..) | |
| , ForceMergeIndexSettings(..) | |
| , defaultForceMergeIndexSettings | |
| , TemplateName(..) | |
| , TemplatePattern(..) | |
| , MappingName(..) | |
| , DocId(..) | |
| , CacheName(..) | |
| , CacheKey(..) | |
| , BulkOperation(..) | |
| , ReplicaCount(..) | |
| , ShardCount(..) | |
| , Sort | |
| , SortMode(..) | |
| , SortOrder(..) | |
| , SortSpec(..) | |
| , DefaultSort(..) | |
| , Missing(..) | |
| , OpenCloseIndex(..) | |
| , Method | |
| , Boost(..) | |
| , MatchQuery(..) | |
| , MultiMatchQuery(..) | |
| , BoolQuery(..) | |
| , BoostingQuery(..) | |
| , CommonTermsQuery(..) | |
| , FunctionScoreQuery(..) | |
| , BoostMode(..) | |
| , ScoreMode(..) | |
| , FunctionScoreFunctions(..) | |
| , ComponentFunctionScoreFunction(..) | |
| , FunctionScoreFunction(..) | |
| , Weight(..) | |
| , Seed(..) | |
| , FieldValueFactor(..) | |
| , Factor(..) | |
| , FactorModifier(..) | |
| , FactorMissingFieldValue(..) | |
| , DisMaxQuery(..) | |
| , FuzzyLikeThisQuery(..) | |
| , FuzzyLikeFieldQuery(..) | |
| , FuzzyQuery(..) | |
| , HasChildQuery(..) | |
| , HasParentQuery(..) | |
| , IndicesQuery(..) | |
| , MoreLikeThisQuery(..) | |
| , MoreLikeThisFieldQuery(..) | |
| , NestedQuery(..) | |
| , PrefixQuery(..) | |
| , QueryStringQuery(..) | |
| , SimpleQueryStringQuery(..) | |
| , RangeQuery(..) | |
| , RegexpQuery(..) | |
| , QueryString(..) | |
| , TemplateQueryInline(..) | |
| , TemplateQueryKeyValuePairs(..) | |
| , WildcardQuery(..) | |
| , BooleanOperator(..) | |
| , ZeroTermsQuery(..) | |
| , CutoffFrequency(..) | |
| , Analyzer(..) | |
| , Tokenizer(..) | |
| , TokenFilter(..) | |
| , CharFilter(..) | |
| , MaxExpansions(..) | |
| , Lenient(..) | |
| , MatchQueryType(..) | |
| , MultiMatchQueryType(..) | |
| , Tiebreaker(..) | |
| , MinimumMatch(..) | |
| , DisableCoord(..) | |
| , CommonMinimumMatch(..) | |
| , MinimumMatchHighLow(..) | |
| , PrefixLength(..) | |
| , Fuzziness(..) | |
| , IgnoreTermFrequency(..) | |
| , MaxQueryTerms(..) | |
| , ScoreType(..) | |
| , Score | |
| , Cache | |
| , TypeName(..) | |
| , BoostTerms(..) | |
| , MaxWordLength(..) | |
| , MinWordLength(..) | |
| , MaxDocFrequency(..) | |
| , MinDocFrequency(..) | |
| , PhraseSlop(..) | |
| , StopWord(..) | |
| , QueryPath(..) | |
| , MinimumTermFrequency(..) | |
| , PercentMatch(..) | |
| , FieldDefinition(..) | |
| , MappingField(..) | |
| , Mapping(..) | |
| , AllowLeadingWildcard(..) | |
| , LowercaseExpanded(..) | |
| , GeneratePhraseQueries(..) | |
| , Locale(..) | |
| , AnalyzeWildcard(..) | |
| , EnablePositionIncrements(..) | |
| , SimpleQueryFlag(..) | |
| , FieldOrFields(..) | |
| , Monoid(..) | |
| , ToJSON(..) | |
| , Interval(..) | |
| , TimeInterval(..) | |
| , ExecutionHint(..) | |
| , CollectionMode(..) | |
| , TermOrder(..) | |
| , TermInclusion(..) | |
| , SnapshotRepoSelection(..) | |
| , GenericSnapshotRepo(..) | |
| , SnapshotRepo(..) | |
| , SnapshotRepoConversionError(..) | |
| , SnapshotRepoType(..) | |
| , GenericSnapshotRepoSettings(..) | |
| , SnapshotRepoUpdateSettings(..) | |
| , defaultSnapshotRepoUpdateSettings | |
| , SnapshotRepoName(..) | |
| , SnapshotRepoPattern(..) | |
| , SnapshotVerification(..) | |
| , SnapshotNodeVerification(..) | |
| , FullNodeId(..) | |
| , NodeName(..) | |
| , ClusterName(..) | |
| , NodesInfo(..) | |
| , NodesStats(..) | |
| , NodeStats(..) | |
| , NodeBreakersStats(..) | |
| , NodeBreakerStats(..) | |
| , NodeHTTPStats(..) | |
| , NodeTransportStats(..) | |
| , NodeFSStats(..) | |
| , NodeDataPathStats(..) | |
| , NodeFSTotalStats(..) | |
| , NodeNetworkStats(..) | |
| , NodeThreadPoolsStats(..) | |
| , NodeThreadPoolStats(..) | |
| , NodeJVMStats(..) | |
| , JVMBufferPoolStats(..) | |
| , JVMGCStats(..) | |
| , JVMPoolStats(..) | |
| , NodeProcessStats(..) | |
| , NodeOSStats(..) | |
| , LoadAvgs(..) | |
| , NodeIndicesStats(..) | |
| , EsAddress(..) | |
| , PluginName(..) | |
| , NodeInfo(..) | |
| , NodePluginInfo(..) | |
| , NodeHTTPInfo(..) | |
| , NodeTransportInfo(..) | |
| , BoundTransportAddress(..) | |
| , NodeNetworkInfo(..) | |
| , MacAddress(..) | |
| , NetworkInterfaceName(..) | |
| , NodeNetworkInterface(..) | |
| , NodeThreadPoolsInfo(..) | |
| , NodeThreadPoolInfo(..) | |
| , ThreadPoolSize(..) | |
| , ThreadPoolType(..) | |
| , NodeJVMInfo(..) | |
| , JVMMemoryPool(..) | |
| , JVMGCCollector(..) | |
| , JVMMemoryInfo(..) | |
| , PID(..) | |
| , NodeOSInfo(..) | |
| , CPUInfo(..) | |
| , NodeProcessInfo(..) | |
| , FsSnapshotRepo(..) | |
| , SnapshotCreateSettings(..) | |
| , defaultSnapshotCreateSettings | |
| , SnapshotSelection(..) | |
| , SnapshotPattern(..) | |
| , SnapshotInfo(..) | |
| , SnapshotShardFailure(..) | |
| , ShardId(..) | |
| , SnapshotName(..) | |
| , SnapshotState(..) | |
| , SnapshotRestoreSettings(..) | |
| , defaultSnapshotRestoreSettings | |
| , RestoreRenamePattern(..) | |
| , RestoreRenameToken(..) | |
| , RRGroupRefNum | |
| , rrGroupRefNum | |
| , mkRRGroupRefNum | |
| , RestoreIndexSettings(..) | |
| , Suggest(..) | |
| , SuggestType(..) | |
| , PhraseSuggester(..) | |
| , PhraseSuggesterHighlighter(..) | |
| , PhraseSuggesterCollate(..) | |
| , mkPhraseSuggester | |
| , SuggestOptions(..) | |
| , SuggestResponse(..) | |
| , NamedSuggestionResponse(..) | |
| , DirectGenerators(..) | |
| , mkDirectGenerators | |
| , DirectGeneratorSuggestModeTypes (..) | |
| , Aggregation(..) | |
| , Aggregations | |
| , AggregationResults | |
| , BucketValue(..) | |
| , Bucket(..) | |
| , BucketAggregation(..) | |
| , TermsAggregation(..) | |
| , MissingAggregation(..) | |
| , ValueCountAggregation(..) | |
| , FilterAggregation(..) | |
| , CardinalityAggregation(..) | |
| , DateHistogramAggregation(..) | |
| , DateRangeAggregation(..) | |
| , DateRangeAggRange(..) | |
| , DateMathExpr(..) | |
| , DateMathAnchor(..) | |
| , DateMathModifier(..) | |
| , DateMathUnit(..) | |
| , TopHitsAggregation(..) | |
| , StatisticsAggregation(..) | |
| , Highlights(..) | |
| , FieldHighlight(..) | |
| , HighlightSettings(..) | |
| , PlainHighlight(..) | |
| , PostingsHighlight(..) | |
| , FastVectorHighlight(..) | |
| , CommonHighlight(..) | |
| , NonPostings(..) | |
| , HighlightEncoder(..) | |
| , HighlightTag(..) | |
| , HitHighlight | |
| , MissingResult(..) | |
| , TermsResult(..) | |
| , DateHistogramResult(..) | |
| , DateRangeResult(..) | |
| , TopHitResult(..) | |
| , EsUsername(..) | |
| , EsPassword(..) | |
| , Analysis(..) | |
| , AnalyzerDefinition(..) | |
| , TokenizerDefinition(..) | |
| , TokenFilterDefinition(..) | |
| , CharFilterDefinition(..) | |
| , Ngram(..) | |
| , TokenChar(..) | |
| , Shingle(..) | |
| , Language(..) | |
| ) where | |
| import Bloodhound.Import | |
| import Database.V5.Bloodhound.Types.Class | |
| import Database.V5.Bloodhound.Internal.Analysis | |
| import Database.V5.Bloodhound.Internal.Aggregation | |
| import Database.V5.Bloodhound.Internal.Client | |
| import Database.V5.Bloodhound.Internal.Highlight | |
| import Database.V5.Bloodhound.Internal.Newtypes | |
| import Database.V5.Bloodhound.Internal.Query | |
| import Database.V5.Bloodhound.Internal.Sort | |
| import Database.V5.Bloodhound.Internal.Suggest | |
| {-| 'unpackId' is a silly convenience function that gets used once. | |
| -} | |
| unpackId :: DocId -> Text | |
| unpackId (DocId docId) = docId | |
| type TrackSortScores = Bool | |
| data Search = Search { queryBody :: Maybe Query | |
| , filterBody :: Maybe Filter | |
| , sortBody :: Maybe Sort | |
| , aggBody :: Maybe Aggregations | |
| , highlight :: Maybe Highlights | |
| -- default False | |
| , trackSortScores :: TrackSortScores | |
| , from :: From | |
| , size :: Size | |
| , searchType :: SearchType | |
| , fields :: Maybe [FieldName] | |
| , scriptFields :: Maybe ScriptFields | |
| , source :: Maybe Source | |
| , suggestBody :: Maybe Suggest -- ^ Only one Suggestion request / response per Search is supported. | |
| } deriving (Eq, Show) | |
| instance ToJSON Search where | |
| toJSON (Search mquery sFilter sort searchAggs | |
| highlight sTrackSortScores sFrom sSize _ sFields | |
| sScriptFields sSource sSuggest) = | |
| omitNulls [ "query" .= query' | |
| , "sort" .= sort | |
| , "aggregations" .= searchAggs | |
| , "highlight" .= highlight | |
| , "from" .= sFrom | |
| , "size" .= sSize | |
| , "track_scores" .= sTrackSortScores | |
| , "fields" .= sFields | |
| , "script_fields" .= sScriptFields | |
| , "_source" .= sSource | |
| , "suggest" .= sSuggest] | |
| where query' = case sFilter of | |
| Nothing -> mquery | |
| Just x -> | |
| Just | |
| . QueryBoolQuery | |
| $ mkBoolQuery (maybeToList mquery) | |
| [x] [] [] | |
| data SearchType = SearchTypeQueryThenFetch | |
| | SearchTypeDfsQueryThenFetch | |
| deriving (Eq, Show) | |
| data Source = | |
| NoSource | |
| | SourcePatterns PatternOrPatterns | |
| | SourceIncludeExclude Include Exclude | |
| deriving (Eq, Show) | |
| instance ToJSON Source where | |
| toJSON NoSource = toJSON False | |
| toJSON (SourcePatterns patterns) = toJSON patterns | |
| toJSON (SourceIncludeExclude incl excl) = object [ "includes" .= incl, "excludes" .= excl ] | |
| data PatternOrPatterns = PopPattern Pattern | |
| | PopPatterns [Pattern] deriving (Eq, Read, Show) | |
| instance ToJSON PatternOrPatterns where | |
| toJSON (PopPattern pattern) = toJSON pattern | |
| toJSON (PopPatterns patterns) = toJSON patterns | |
| data Include = Include [Pattern] deriving (Eq, Read, Show) | |
| data Exclude = Exclude [Pattern] deriving (Eq, Read, Show) | |
| instance ToJSON Include where | |
| toJSON (Include patterns) = toJSON patterns | |
| instance ToJSON Exclude where | |
| toJSON (Exclude patterns) = toJSON patterns | |
| newtype Pattern = Pattern Text deriving (Eq, Read, Show) | |
| instance ToJSON Pattern where | |
| toJSON (Pattern pattern) = toJSON pattern | |
| data SearchResult a = | |
| SearchResult { took :: Int | |
| , timedOut :: Bool | |
| , shards :: ShardResult | |
| , searchHits :: SearchHits a | |
| , aggregations :: Maybe AggregationResults | |
| , scrollId :: Maybe ScrollId | |
| -- ^ Only one Suggestion request / response per | |
| -- Search is supported. | |
| , suggest :: Maybe NamedSuggestionResponse | |
| } | |
| deriving (Eq, Show) | |
| instance (FromJSON a) => FromJSON (SearchResult a) where | |
| parseJSON (Object v) = SearchResult <$> | |
| v .: "took" <*> | |
| v .: "timed_out" <*> | |
| v .: "_shards" <*> | |
| v .: "hits" <*> | |
| v .:? "aggregations" <*> | |
| v .:? "_scroll_id" <*> | |
| v .:? "suggest" | |
| parseJSON _ = empty | |
| newtype ScrollId = | |
| ScrollId Text | |
| deriving (Eq, Show, Ord, ToJSON, FromJSON) |