Giza.SphinxProtocol (giza_sphinxsearch v1.0.7)

Send query to Sphinx Daemon and return results syncronously using sphinx native protocol. Module could be removed/refactored soon.

Link to this section Summary

Functions

Return a new query with the configured host and port

Assign weights on a per field basis. Should be a list of fields from the query source of the indexes of your query. This will affect the weight of your query and can tilt phrase matching in favor of results from favored sources. The example below weighs results from the title as 50% more valued than results from the body text. Keep in mind any fields not listed keep their default of 1.

Use one of your sphinx attributes to filter results to exclude the values you pass.

Use one of your sphinx attributes to filter results down to the values you pass.

Utilize geo ability in a sphinx query.

Allows clustering of results. Details on how this can be helpful (and it can!) are contained in the sphinx documentation: http://sphinxsearch.com/docs/current.html#clustering Clustering results are compatible with AVG, SUMS and such function calls you may be used to from SQL. Use SetSelect in conjunction with Group (not yet supported in this client). Default value is @group desc (simply return results in order of descending weight)

Assign additional weight to be added to each of your index on the passed query. If you have results from index_a and index_b with weight results 2 and 3 and use the below example call, your document weight will be 2 30 + 3 80 = 300.
Without weights sphinx would simple choose the latter index if the document is found in both indexes (3). This can be useful depending on how your data is partitioned or doing more complex searches from multiple sources.

Retrun a query structure with a limit added. A sphinx limited query will return the amount of total matches but will limit the returned documents. This along with offset is commonly used for pagination

Return the maximum matches a query can return. Unlike limit, rather than page the returned results, it limits them before results are tabulated and returned and affects your total results count returned.

Build a new default query against the passed index and phrase

Return a query structure with a limit added. A sphinx limited query will return the amount of total matches but will limit the returned documents. This along with offset is commonly used for pagination

Create a query based on the supplied index(es) and search phrase. This is the easiest way to start building a query to Sphinx and supports piping to all Giza.Query's interface. Returns a tuple suitable for sending to Giza's erlang parser for speaking the sphinx native format.

Return a query structure with the phrase string set. This is a wrapper to support all of giza_query.erl, so not recommended to use directly

Send a request to the configured sphinx daemon. The results will be parsed as a map for easy pattern matching on whatever parts of the result of interest. Words returns a tuple with the search phrase, the amount of documents found containing a hit, and the amount of total hits (well enough weighted match to return a result).

Automatically changes your sort mode to SPHINX_SORT_EXTENDED (default is SPHINX_SORT_RELEVANCE). Takes the given expression and uses that to rank results. http://sphinxsearch.com/docs/current.html#sort-extended.

Link to this section Functions

Link to this function

connection(query)

Return a new query with the configured host and port

## Examples

iex> Giza.SphinxProtocol.connection(query) {:giza_query, 'localhost', 9312, 0, 275,

    "postsummary_fast_index postsummary_slow_index", 0, 25, 0, 0, 1000, 0, 0, "",
    "", 0, "@group desc", "test", [], 0, [], [], 0}
Link to this function

connection(query, host, port)

Link to this function

field_weights(query, field_weights)

Assign weights on a per field basis. Should be a list of fields from the query source of the indexes of your query. This will affect the weight of your query and can tilt phrase matching in favor of results from favored sources. The example below weighs results from the title as 50% more valued than results from the body text. Keep in mind any fields not listed keep their default of 1.

Examples

    iex> Giza.SphinxProtocol.field_weights(query, [title: 3, body: 2])
    {:giza_query, 'localhost', 9312, 0, 275,
    "postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 1000, 0, 4, "",
    "", 0, "@group desc", "searchforme", [], 0, [], [title: 3, body: 2], 0}
Link to this function

filter_exclude(query, name, values)

Use one of your sphinx attributes to filter results to exclude the values you pass.

Examples

    sphinx.conf:

    source some_index : sql
    {
    ...
    sql_attr_uint = user_age
    ...
    }

    iex> Giza.SphinxProtocol.filter_exclude(query, 'user_age', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    {:giza_query, 'localhost', 9312, 0, 275,
    "postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 1000, 0, 4, "",
    "", 0, "@group desc", "searchforme", [{:value, 'user_age', true, [1,2,3,4,5,6,7,8,9,10]}], 0, [], [], 0}

    iex> Giza.SphinxProtocol.filter_exclude(query, 'user_age', 1, 10)
    {:giza_query, 'localhost', 9312, 0, 275,
    "postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 1000, 0, 4, "",
    "", 0, "@group desc", "searchforme", [{:range, 'user_age', true, {1,10}}], 0, [], [], 0}
Link to this function

filter_exclude(query, name, min, max)

Link to this function

filter_include(query, name, values)

Use one of your sphinx attributes to filter results down to the values you pass.

Examples

    sphinx.conf:

    source some_index : sql
    {
    ...
    sql_attr_uint = user_age
    ...
    }

    iex> Giza.SphinxProtocol.filter_include(query, 'user_age', [50, 60, 70])
    {:giza_query, 'localhost', 9312, 0, 275,
    "postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 1000, 0, 4, "",
    "", 0, "@group desc", "searchforme", [{:value, 'user_age', false, [50,60,70]}], 0, [], [], 0}

    iex> Giza.SphinxProtocol.filter_include(query, 'user_age', 50, 60])
    {:giza_query, 'localhost', 9312, 0, 275,
    "postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 1000, 0, 4, "",
    "", 0, "@group desc", "searchforme", [{:range, 'user_age', false, {50,60}}], 0, [], [], 0}
Link to this function

filter_include(query, name, min, max)

Link to this function

geo(query, lat, long)

Utilize geo ability in a sphinx query.

Examples

    iex> Giza.SphinxProtocol.geo(query, 0.659298124, -2.136602399)
    {:giza_query, 'localhost', 9312, 0, 275,
    "postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 1000, 0, 4, "",
    "", 0, "@group desc", "genghis khan", [], {:deg, 0.659298124, -2.136602399}, [], [], 0}     
Link to this function

group_by(query, group_by)

Allows clustering of results. Details on how this can be helpful (and it can!) are contained in the sphinx documentation: http://sphinxsearch.com/docs/current.html#clustering Clustering results are compatible with AVG, SUMS and such function calls you may be used to from SQL. Use SetSelect in conjunction with Group (not yet supported in this client). Default value is @group desc (simply return results in order of descending weight)

Link to this function

index_weights(query, weights)

Assign additional weight to be added to each of your index on the passed query. If you have results from index_a and index_b with weight results 2 and 3 and use the below example call, your document weight will be 2 30 + 3 80 = 300.
Without weights sphinx would simple choose the latter index if the document is found in both indexes (3). This can be useful depending on how your data is partitioned or doing more complex searches from multiple sources.

Examples

    iex> Giza.SphinxProtocol.geo(query, [postsummary_fast_index: 30, postsummary_slow_index: 80])
    {:giza_query, 'localhost', 9312, 0, 275,
    "postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 1000, 0, 4, "",
    "", 0, "@group desc", "searchforme", [], 0, [postsummary_fast_index: 30, postsummary_slow_index: 80], [], 0}
Link to this function

limit(query, limit)

Retrun a query structure with a limit added. A sphinx limited query will return the amount of total matches but will limit the returned documents. This along with offset is commonly used for pagination

## Examples

iex> Giza.SphinxProtocol.limit(query, 10)
{:giza_query, 'localhost', 9312, 0, 275,
"postsummary_fast_index postsummary_slow_index", 0, 10, 0, 0, 1000, 0, 0, "",
"", 0, "@group desc", "searchforme", [], 0, [], [], 0}
Link to this function

max_matches(query, max)

Return the maximum matches a query can return. Unlike limit, rather than page the returned results, it limits them before results are tabulated and returned and affects your total results count returned.

Examples

    iex> Giza.SphinxProtocol.max_matches(query, 20)
    {:giza_query, 'localhost', 9312, 0, 275,
    "postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 20, 0, 0, "",
        "", 0, "@group desc", "searchforme", [], 0, [], [], 0}
Link to this function

new(index, search_phrase)

Build a new default query against the passed index and phrase

## Examples

iex> Giza.SphinxProtocol.new('postsummary_fast_index postsummary_slow_index', 'baggy') {:giza_query, 'localhost', 9312, 0, 275,

    "postsummary_fast_index postsummary_slow_index", 0, 25, 0, 0, 1000, 0, 0, "",
    "", 0, "@group desc", "test", [], 0, [], [], 0}
Link to this function

offset(query, offset)

Return a query structure with a limit added. A sphinx limited query will return the amount of total matches but will limit the returned documents. This along with offset is commonly used for pagination

## Examples

iex> Giza.SphinxProtocol.limit(query, 10)
{:giza_query, 'localhost', 9312, 0, 275,
"postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 1000, 0, 0, "",
"", 0, "@group desc", "searchforme", [], 0, [], [], 0}
Link to this function

query(index, search_phrase)

Create a query based on the supplied index(es) and search phrase. This is the easiest way to start building a query to Sphinx and supports piping to all Giza.Query's interface. Returns a tuple suitable for sending to Giza's erlang parser for speaking the sphinx native format.

## Examples

iex> Giza.query('postsummary_fast_index postsummary_slow_index', 'baggy') {:giza_query, 'localhost', 9312, 0, 275, "postsummary_fast_index postsummary_slow_index", 0, 25, 0, 0, 1000, 0, 0, "", "", 0, "@group desc", "test", [], 0, [], [], 0}

Link to this function

query_phrase(query, query_phrase)

Return a query structure with the phrase string set. This is a wrapper to support all of giza_query.erl, so not recommended to use directly

## Examples

iex> Giza.SphinxProtocol.query_phrase(query, 'searchforme')
{:giza_query, 'localhost', 9312, 0, 275,
"postsummary_fast_index postsummary_slow_index", 0, 25, 0, 0, 1000, 0, 0, "",
"", 0, "@group desc", "searchforme", [], 0, [], [], 0}

Send a request to the configured sphinx daemon. The results will be parsed as a map for easy pattern matching on whatever parts of the result of interest. Words returns a tuple with the search phrase, the amount of documents found containing a hit, and the amount of total hits (well enough weighted match to return a result).

## Examples

iex> Giza.send(query) {:ok,

%{attrs: [{"title", 7}, {"body", 7}],
  fields: ["title", "body", "tags"],
  matches: [{171,
    [doc_id: 171, weight: 2,
     attrs: [{"title", 7}, {"body", 7}]]}],
  {190,
  ..
  }],
  status: 0, 
  time: 0.008, 
  total: 19, 
  total_found: 19, 
  warnings: [],
  words: [{"test", 19, 23}]
}

}

Link to this function

sort_extended(query, expression)

Automatically changes your sort mode to SPHINX_SORT_EXTENDED (default is SPHINX_SORT_RELEVANCE). Takes the given expression and uses that to rank results. http://sphinxsearch.com/docs/current.html#sort-extended.

## Examples

iex> Giza.SphinxProtocol.sort_extended(query, '@weight + (publicvotes + ln(userreputation)) * 0.1')
{:giza_query, 'localhost', 9312, 0, 275,
"postsummary_fast_index postsummary_slow_index", 10, 25, 0, 0, 1000, 0, 4, "@weight + (publicvotes + ln(userreputation)) * 0.1",
"", 0, "@group desc", "searchforme", [], 0, [], [], 0}