/tantex

A lib for using Rust's Tantivy in Elixir

Primary LanguageRust

Tantex

This is an experimental lib for interacting with tantivy from Elixir.

Installation

If available in Hex, the package can be installed by adding tantex to your list of dependencies in mix.exs:

def deps do
  [
    {:tantex, "~> 0.1.0"}
  ]
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/tantex.

Example Placeholder

iex(1)> {:ok, index} = Tantex.open("./data/demo", [Tantex.Field.build("name", :text), Tantex.Field.build("age", :u64, stored: true, fast: true)])
{:ok,
 %Tantex.Index{
   __ref__: #Reference<0.670193976.377618434.7366>,
   fields: [
     %Tantex.Field{fast: true, kind: :u64, name: "age", stored: true},
     %Tantex.Field{fast: false, kind: :text, name: "name", stored: true}
   ],
   path: "./data/demo"
 }}
iex(2)> {:ok, id1} = Tantex.insert_documents(index, [%{name: "jason", age: 35}])
{:ok, 1}
iex(3)> {:ok, id2} = Tantex.insert_documents(index, [%{name: "jason goldberger", age: 36}])
{:ok, 2}
iex(4)> {:ok, id3} = Tantex.insert_documents(index, [%{name: "jason louis goldberger", age: 37}])
{:ok, 3}
iex(5)> Tantex.find_one(index, "age", 35){:ok, %{"age" => '#', "name" => ["jason"]}}
iex(6)> Tantex.find_many(index, ["name"], "jason", 2)
{:ok,
 [
   %{"age" => '#', "name" => ["jason"]},
   %{"age" => '$', "name" => ["jason goldberger"]}
 ]}
iex(7)> Tantex.find_many(index, ["name"], "jason", 10)
{:ok,
 [
   %{"age" => '#', "name" => ["jason"]},
   %{"age" => '$', "name" => ["jason goldberger"]},
   %{"age" => '%', "name" => ["jason louis goldberger"]}
 ]}
iex(8)> Tantex.find_one(index, "age", "wrong_type_here")
{:error, {:invalid_field_data, "type: U64 - field_name: \"age\""}}