Packages

  • package root

    Documentation/API for the Molecule library - a meta DSL for the Datomic database.

    scalamolecule.org | Github | Forum

    Definition Classes
    root
  • package molecule

    Molecule library - a Scala meta-DSL for the Datomic database.

    Molecule library - a Scala meta-DSL for the Datomic database.

    Definition Classes
    root
  • package core
    Definition Classes
    molecule
  • package expression

    Attribute expressions and operations.

    Attribute expressions and operations.

    Refine attribute matches with various attribute expressions:

    Person.age(42)                           // equality
    Person.name.contains("John")             // fulltext search
    Person.age.!=(42)                        // negation (or `not`)
    Person.age.<(42)                         // comparison (< > <= >=)
    Person.name("John" or "Jonas")           // OR-logic
    Person.age()                             // apply empty value to retract value(s) in updates
    Person.hobbies.assert("golf")               // add value(s) to card-many attributes
    Person.hobbies.retract("golf")            // retract value(s) of card-many attributes
    Person.hobbies.replace("golf", "diving") // replace value(s) of card-many attributes
    Person.tags.k("en")                      // match values of map attributes by key
    Person.age(Nil)                          // match non-asserted datoms (null)
    Person.name(?)                           // initiate input molecules awaiting input at runtime
    Person.name(unify)                       // Unify attributes in self-joins

    Apply aggregate keywords to aggregate attribute value(s):

    // Aggregates on any attribute type
    Person.age(count).get.head         === 3   // count of asserted `age` attribute values
    Person.age(countDistinct).get.head === 3   // count of asserted distinct `age` attribute values
    Person.age(max).get.head           === 38  // maximum `age` value (using `compare`)
    Person.age(min).get.head           === 5   // maximum `age` value (using `compare`)
    Person.age(rand).get.head          === 25  // single random `age` value
    Person.age(sample).get.head        === 27  // single sample `age` value (when single value, same as random)
    
    // Aggregates on any attribute type, returning multiple values
    Person.age(distinct).get.head  === Vector(5, 7, 38)  // distinct `age` values
    Person.age(max(2)).get.head    === Vector(38, 7)     // 2 maximum `age` values
    Person.age(min(2)).get.head    === Vector(5, 7)      // 2 minimum `age` values
    Person.age(rand(2)).get.head   === Stream(5, ?)      // 2 random `age` values (values can re-occur)
    Person.age(sample(2)).get.head === Vector(7, 38)     // 2 sample `age` values
    
    // Aggregates on number attributes
    Person.age(sum).get.head      === 50               // sum of all `age` numbers
    Person.age(avg).get.head      === 16.66666667      // average of all `age` numbers
    Person.age(median).get.head   === 7                // median of all `age` numbers
    Person.age(stddev).get.head   === 15.107025591499  // standard deviation of all `age` numbers
    Person.age(variance).get.head === 228.2222222222   // variance of all `age` numbers
    Definition Classes
    core
  • trait AttrExpressions extends AnyRef

    Attribute expression markers and methods.

    Attribute expression markers and methods.

    Person.age(42)                           // equality
    Person.name.contains("John")             // fulltext search
    Person.age.!=(42)                        // negation (or `not`)
    Person.age.<(42)                         // comparison (< > <= >=)
    Person.age().get                         // match non-asserted datoms (null) in query
    Person(benId).age().update               // apply empty value to retract value(s) in updates
    Person.hobbies.assert("golf")            // assert card-many value(s)
    Person.hobbies.replace("golf", "diving") // replace card-many attribute value(s)
    Person.hobbies.retract("golf")           // retract card-many attribute value(s)
    Person.tags.k("en")                      // match values of map attributes by key
    Person.name(?)                           // initiate input molecules awaiting input at runtime
    Person.name(unify)                       // Unify attributes in self-joins
    Definition Classes
    expression
  • ?
  • AttrExpr
  • FulltextExpr
  • ManyAttrExpr
  • ManyExpr
  • MapAttrExpr
  • OneExpr
  • OptionalExpr
  • ValueAttrExpr
  • unify

trait FulltextExpr[Ns, In] extends AnyRef

Expression methods of String attributes with fulltext search.

Source
AttrExpressions.scala
Linear Supertypes
AnyRef, Any
Known Subclasses
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. FulltextExpr
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  6. def contains(words: ??): In with Attr

    Mark as input molecule with String attribute word search.

    Mark as input molecule with String attribute word search.

    Fulltext searches are case-insensitive and only searches for whole words.

    Phrase.id.txt.get === List(
      (1, "The quick fox jumps"),
      (2, "Ten slow monkeys")
    )
    
    // Mark as input molecule awaiting word(s) to search for
    val phraseFinder = m(Phrase.id.txt_.contains(?))
    
    // Then we can apply words to the input molecule at runtime:
    
    phraseFinder("jumps").get === List(1)
    
    // Only whole words matched
    phraseFinder("jump").get === Nil
    
    // Searches are case-insensitive
    phraseFinder("JuMpS").get === List(1)
    
    // Empty spaces ignored
    phraseFinder("   jumps   ").get === List(1)
    
    // Multiple search words have OR semantics
    phraseFinder("jumps", "slow").get === List(1, 2)
    
    // Common words ignored
    phraseFinder("The").get === Nil
    words

    Search words

    returns

    Input molecule awaiting search word(s)

    Note

    Fulltext search is constrained by several defaults (which cannot be altered): searches are case insensitive, remove apostrophe or apostrophe and s sequences, and filter out the following common English stop words: "a", "an", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"

  7. def contains(word: String, moreWords: String*): Ns with Attr

    Match words of String attribute.

    Match words of String attribute.

    Fulltext searches are case-insensitive and only searches for whole words.

    Phrase.id.txt.get === List(
      (1, "The quick fox jumps"),
      (2, "Ten slow monkeys")
    )
    
    Phrase.id.txt_.contains("jumps").get === List(1)
    
    // Only whole words matched
    Phrase.id.txt_.contains("jump").get === Nil
    
    // Searches are case-insensitive
    Phrase.id.txt_.contains("JuMpS").get === List(1)
    
    // Empty spaces ignored
    Phrase.id.txt_.contains("   jumps   ").get === List(1)
    
    // Multiple search words have OR semantics
    Phrase.id.txt_.contains("jumps", "slow").get === List(1, 2)
    
    // Common words ignored
    Phrase.id.txt_.contains("The").get === Nil
    word

    Search word

    moreWords

    Optional additional search words

    returns

    Filtered molecule

    Note

    Fulltext search is constrained by several defaults (which cannot be altered): searches are case insensitive, remove apostrophe or apostrophe and s sequences, and filter out the following common English stop words: "a", "an", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"

  8. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  9. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  10. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  11. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  12. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  13. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  14. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  15. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  16. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  17. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  18. def toString(): String
    Definition Classes
    AnyRef → Any
  19. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  20. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  21. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from AnyRef

Inherited from Any

Ungrouped