IDZEBRA 2.2.11
rpnsearch.c File Reference
#include <stdio.h>
#include <assert.h>
#include <ctype.h>
#include <yaz/diagbib1.h>
#include <yaz/snprintf.h>
#include "index.h"
#include <zebra_xpath.h>
#include <attrfind.h>
#include <charmap.h>
#include <rset.h>

Go to the source code of this file.

Data Structures

struct  grep_info

Macros

#define TERM_COUNT
#define REGEX_CHARS   " ^[]()|.*+?!\"$\\"
#define MAX_XPATH_STEPS   10

Functions

static const char ** rpn_char_map_handler (void *vp, const char **from, int len)
void rpn_char_map_prepare (struct zebra_register *reg, zebra_map_t zm, struct rpn_char_map_info *map_info)
static int add_isam_p (const char *name, const char *info, struct grep_info *p)
static int grep_handle (char *name, const char *info, void *p)
static int term_pre (zebra_map_t zm, const char **src, const char *ct1, int first)
static void esc_str (char *out_buf, size_t out_size, const char *in_buf, int in_size)
static void add_non_space (const char *start, const char *end, WRBUF term_dict, WRBUF display_term, const char **map, int q_map_match)
static size_t icu_basechars (const char *buf, size_t i)
static int term_102_icu (zebra_map_t zm, const char **src, WRBUF term_dict, int space_split, WRBUF display_term)
static int term_100_icu (zebra_map_t zm, const char **src, WRBUF term_dict, WRBUF display_term, int mode, size_t token_number)
static int term_100 (zebra_map_t zm, const char **src, WRBUF term_dict, int space_split, WRBUF display_term)
static int term_101 (zebra_map_t zm, const char **src, WRBUF term_dict, int space_split, WRBUF display_term)
static int term_103 (zebra_map_t zm, const char **src, WRBUF term_dict, int *errors, int space_split, WRBUF display_term)
static int term_102 (zebra_map_t zm, const char **src, WRBUF term_dict, int space_split, WRBUF display_term)
static int term_104 (zebra_map_t zm, const char **src, WRBUF term_dict, int space_split, WRBUF display_term)
static int term_105 (zebra_map_t zm, const char **src, WRBUF term_dict, int space_split, WRBUF display_term, int right_truncate)
static void gen_regular_rel (WRBUF dst, int val, int islt)
void string_rel_add_char (WRBUF term_p, WRBUF wsrc, int *indx)
static int string_relation (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char **term_sub, WRBUF term_dict, const Odr_oid *attributeSet, zebra_map_t zm, int space_split, WRBUF display_term, int *error_code)
static ZEBRA_RES string_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char **term_sub, WRBUF term_dict, const Odr_oid *attributeSet, NMEM stream, struct grep_info *grep_info, const char *index_type, int complete_flag, WRBUF display_term, const char *xpath_use, struct ord_list **ol, zebra_map_t zm, size_t token_number)
ZEBRA_RES zebra_term_limits_APT (ZebraHandle zh, Z_AttributesPlusTerm *zapt, zint *hits_limit_value, const char **term_ref_id_str, NMEM nmem)
static ZEBRA_RES search_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char **term_sub, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, struct grep_info *grep_info, const char *index_type, int complete_flag, const char *rank_type, const char *xpath_use, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc, zebra_map_t zm, size_t token_number)
 search for term (which may be truncated)
static void grep_info_delete (struct grep_info *grep_info)
static ZEBRA_RES grep_info_prepare (ZebraHandle zh, Z_AttributesPlusTerm *zapt, struct grep_info *grep_info, const char *index_type)
static ZEBRA_RES search_terms_chrmap (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termz, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, const char *index_type, int complete_flag, const char *rank_type, const char *xpath_use, NMEM rset_nmem, RSET **result_sets, int *num_result_sets, struct rset_key_control *kc, zebra_map_t zm)
static ZEBRA_RES search_terms_list (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termz, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, const char *index_type, int complete_flag, const char *rank_type, const char *xpath_use, NMEM rset_nmem, RSET **result_sets, int *num_result_sets, struct rset_key_control *kc)
 Create result set(s) for list of terms.
static RSET search_group (ZebraHandle zh, const char *unit, const char *term, NMEM rset_nmem, struct rset_key_control *kc)
static ZEBRA_RES search_position (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const Odr_oid *attributeSet, const char *index_type, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc)
 limit a search by position - returns result set
static ZEBRA_RES rpn_search_APT_phrase (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termz_org, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, const char *index_type, int complete_flag, const char *rank_type, const char *xpath_use, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc)
 returns result set for phrase search
static ZEBRA_RES rpn_search_APT_or_list (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termz_org, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, const char *index_type, int complete_flag, const char *rank_type, const char *xpath_use, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc)
 returns result set for or-list search
static ZEBRA_RES rpn_search_APT_and_list (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termz_org, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, const char *index_type, int complete_flag, const char *rank_type, const char *xpath_use, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc)
 returns result set for and-list search
static int numeric_relation (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char **term_sub, WRBUF term_dict, const Odr_oid *attributeSet, struct grep_info *grep_info, int *max_pos, zebra_map_t zm, WRBUF display_term, int *error_code)
static ZEBRA_RES numeric_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char **term_sub, WRBUF term_dict, const Odr_oid *attributeSet, NMEM stream, struct grep_info *grep_info, const char *index_type, int complete_flag, WRBUF display_term, const char *xpath_use, struct ord_list **ol)
static ZEBRA_RES rpn_search_APT_numeric (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termz, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, const char *index_type, int complete_flag, const char *rank_type, const char *xpath_use, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc)
static ZEBRA_RES rpn_search_APT_local (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termz, const Odr_oid *attributeSet, NMEM stream, const char *rank_type, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc)
static ZEBRA_RES rpn_sort_spec (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const Odr_oid *attributeSet, NMEM stream, Z_SortKeySpecList *sort_sequence, const char *rank_type, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc)
static int rpn_check_xpath (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const Odr_oid *attributeSet, struct xpath_location_step *xpath, int max, NMEM mem)
static RSET xpath_trunc (ZebraHandle zh, NMEM stream, const char *index_type, const char *term, const char *xpath_use, NMEM rset_nmem, struct rset_key_control *kc)
static ZEBRA_RES rpn_search_xpath (ZebraHandle zh, NMEM stream, const char *rank_type, RSET rset, int xpath_len, struct xpath_location_step *xpath, NMEM rset_nmem, RSET *rset_out, struct rset_key_control *kc)
static ZEBRA_RES rpn_search_database (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, Z_SortKeySpecList *sort_sequence, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc)
static ZEBRA_RES rpn_search_APT (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, Z_SortKeySpecList *sort_sequence, int num_bases, const char **basenames, NMEM rset_nmem, RSET *rset, struct rset_key_control *kc)
static ZEBRA_RES rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, NMEM rset_nmem, Z_SortKeySpecList *sort_sequence, int num_bases, const char **basenames, RSET **result_sets, int *num_result_sets, Z_Operator *parent_op, struct rset_key_control *kc)
ZEBRA_RES rpn_get_top_approx_limit (ZebraHandle zh, Z_RPNStructure *zs, zint *approx_limit)
ZEBRA_RES rpn_search_top (ZebraHandle zh, Z_RPNStructure *zs, const Odr_oid *attributeSet, zint hits_limit, NMEM stream, NMEM rset_nmem, Z_SortKeySpecList *sort_sequence, int num_bases, const char **basenames, RSET *result_set)

Variables

static int log_level_set = 0
static int log_level_rpn = 0

Macro Definition Documentation

◆ MAX_XPATH_STEPS

#define MAX_XPATH_STEPS   10

Definition at line 2302 of file rpnsearch.c.

Referenced by rpn_search_database().

◆ REGEX_CHARS

#define REGEX_CHARS   " ^[]()|.*+?!\"$\\"

Definition at line 206 of file rpnsearch.c.

Referenced by add_non_space(), rpn_search_xpath(), term_100(), term_100_icu(), and term_102_icu().

◆ TERM_COUNT

#define TERM_COUNT

Definition at line 73 of file rpnsearch.c.

Function Documentation

◆ add_isam_p()

◆ add_non_space()

void add_non_space ( const char * start,
const char * end,
WRBUF term_dict,
WRBUF display_term,
const char ** map,
int q_map_match )
static

Definition at line 208 of file rpnsearch.c.

References end(), esc_str(), and REGEX_CHARS.

Referenced by term_100(), term_101(), term_103(), term_104(), and term_105().

◆ esc_str()

void esc_str ( char * out_buf,
size_t out_size,
const char * in_buf,
int in_size )
static

Definition at line 180 of file rpnsearch.c.

Referenced by add_non_space(), and string_term().

◆ gen_regular_rel()

void gen_regular_rel ( WRBUF dst,
int val,
int islt )
static

Definition at line 628 of file rpnsearch.c.

Referenced by numeric_relation().

◆ grep_handle()

int grep_handle ( char * name,
const char * info,
void * p )
static

Definition at line 153 of file rpnsearch.c.

References add_isam_p().

Referenced by numeric_relation(), string_term(), and xpath_trunc().

◆ grep_info_delete()

void grep_info_delete ( struct grep_info * grep_info)
static

◆ grep_info_prepare()

◆ icu_basechars()

size_t icu_basechars ( const char * buf,
size_t i )
static

Definition at line 241 of file rpnsearch.c.

Referenced by term_100_icu(), and term_102_icu().

◆ numeric_relation()

int numeric_relation ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char ** term_sub,
WRBUF term_dict,
const Odr_oid * attributeSet,
struct grep_info * grep_info,
int * max_pos,
zebra_map_t zm,
WRBUF display_term,
int * error_code )
static

◆ numeric_term()

ZEBRA_RES numeric_term ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char ** term_sub,
WRBUF term_dict,
const Odr_oid * attributeSet,
NMEM stream,
struct grep_info * grep_info,
const char * index_type,
int complete_flag,
WRBUF display_term,
const char * xpath_use,
struct ord_list ** ol )
static

◆ rpn_char_map_handler()

const char ** rpn_char_map_handler ( void * vp,
const char ** from,
int len )
static

Definition at line 44 of file rpnsearch.c.

References zebra_maps_input(), and rpn_char_map_info::zm.

Referenced by rpn_char_map_prepare().

◆ rpn_char_map_prepare()

void rpn_char_map_prepare ( struct zebra_register * reg,
zebra_map_t zm,
struct rpn_char_map_info * map_info )

◆ rpn_check_xpath()

int rpn_check_xpath ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const Odr_oid * attributeSet,
struct xpath_location_step * xpath,
int max,
NMEM mem )
static

Definition at line 2091 of file rpnsearch.c.

References attr_find_ex(), attr_init_APT(), it_key::mem, and zebra_parse_xpath_str().

Referenced by rpn_search_database().

◆ rpn_get_top_approx_limit()

ZEBRA_RES rpn_get_top_approx_limit ( ZebraHandle zh,
Z_RPNStructure * zs,
zint * approx_limit )

◆ rpn_search_APT()

ZEBRA_RES rpn_search_APT ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
Z_SortKeySpecList * sort_sequence,
int num_bases,
const char ** basenames,
NMEM rset_nmem,
RSET * rset,
struct rset_key_control * kc )
static

◆ rpn_search_APT_and_list()

ZEBRA_RES rpn_search_APT_and_list ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char * termz_org,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
const char * index_type,
int complete_flag,
const char * rank_type,
const char * xpath_use,
NMEM rset_nmem,
RSET * rset,
struct rset_key_control * kc )
static

◆ rpn_search_APT_local()

ZEBRA_RES rpn_search_APT_local ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char * termz,
const Odr_oid * attributeSet,
NMEM stream,
const char * rank_type,
NMEM rset_nmem,
RSET * rset,
struct rset_key_control * kc )
static

◆ rpn_search_APT_numeric()

ZEBRA_RES rpn_search_APT_numeric ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char * termz,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
const char * index_type,
int complete_flag,
const char * rank_type,
const char * xpath_use,
NMEM rset_nmem,
RSET * rset,
struct rset_key_control * kc )
static

◆ rpn_search_APT_or_list()

ZEBRA_RES rpn_search_APT_or_list ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char * termz_org,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
const char * index_type,
int complete_flag,
const char * rank_type,
const char * xpath_use,
NMEM rset_nmem,
RSET * rset,
struct rset_key_control * kc )
static

◆ rpn_search_APT_phrase()

ZEBRA_RES rpn_search_APT_phrase ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char * termz_org,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
const char * index_type,
int complete_flag,
const char * rank_type,
const char * xpath_use,
NMEM rset_nmem,
RSET * rset,
struct rset_key_control * kc )
static

◆ rpn_search_database()

◆ rpn_search_structure()

ZEBRA_RES rpn_search_structure ( ZebraHandle zh,
Z_RPNStructure * zs,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
NMEM rset_nmem,
Z_SortKeySpecList * sort_sequence,
int num_bases,
const char ** basenames,
RSET ** result_sets,
int * num_result_sets,
Z_Operator * parent_op,
struct rset_key_control * kc )
static

◆ rpn_search_top()

ZEBRA_RES rpn_search_top ( ZebraHandle zh,
Z_RPNStructure * zs,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
NMEM rset_nmem,
Z_SortKeySpecList * sort_sequence,
int num_bases,
const char ** basenames,
RSET * result_set )

◆ rpn_search_xpath()

◆ rpn_sort_spec()

ZEBRA_RES rpn_sort_spec ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const Odr_oid * attributeSet,
NMEM stream,
Z_SortKeySpecList * sort_sequence,
const char * rank_type,
NMEM rset_nmem,
RSET * rset,
struct rset_key_control * kc )
static

Definition at line 2021 of file rpnsearch.c.

References attr_find(), attr_init_APT(), rset_create_null(), and ZEBRA_OK.

Referenced by rpn_search_database().

◆ search_group()

◆ search_position()

ZEBRA_RES search_position ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const Odr_oid * attributeSet,
const char * index_type,
NMEM rset_nmem,
RSET * rset,
struct rset_key_control * kc )
static

◆ search_term()

ZEBRA_RES search_term ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char ** term_sub,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
struct grep_info * grep_info,
const char * index_type,
int complete_flag,
const char * rank_type,
const char * xpath_use,
NMEM rset_nmem,
RSET * rset,
struct rset_key_control * kc,
zebra_map_t zm,
size_t token_number )
static

search for term (which may be truncated)

Definition at line 976 of file rpnsearch.c.

References grep_info::isam_p_buf, grep_info::isam_p_indx, log_level_rpn, rset_trunc(), rset_key_control::scope, string_term(), ZEBRA_FAIL, ZEBRA_OK, and zebra_term_limits_APT().

Referenced by search_terms_chrmap().

◆ search_terms_chrmap()

ZEBRA_RES search_terms_chrmap ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char * termz,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
const char * index_type,
int complete_flag,
const char * rank_type,
const char * xpath_use,
NMEM rset_nmem,
RSET ** result_sets,
int * num_result_sets,
struct rset_key_control * kc,
zebra_map_t zm )
static

◆ search_terms_list()

ZEBRA_RES search_terms_list ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char * termz,
const Odr_oid * attributeSet,
zint hits_limit,
NMEM stream,
const char * index_type,
int complete_flag,
const char * rank_type,
const char * xpath_use,
NMEM rset_nmem,
RSET ** result_sets,
int * num_result_sets,
struct rset_key_control * kc )
static

Create result set(s) for list of terms.

Parameters
zhZebra Handle
zaptAttributes Plust Term (RPN leaf)
termzterm as used in query but converted to UTF-8
attributeSetdefault attribute set
streammemory for result
index_typeregister type ("w", "p",..)
complete_flagwhether it's phrases or not
rank_typeterm flags for ranking
xpath_useuse attribute for X-Path (-1 for no X-path)
rset_nmemmemory for result sets
result_setsoutput result set for each term in list (output)
num_result_setsnumber of output result sets
kcrset key control to be used for created result sets

Definition at line 1412 of file rpnsearch.c.

References grep_info::index_type, zebra_session::reg, search_terms_chrmap(), zebra_map_get_or_add(), zebra_register::zebra_maps, and grep_info::zh.

Referenced by rpn_search_APT_and_list(), rpn_search_APT_or_list(), and rpn_search_APT_phrase().

◆ string_rel_add_char()

void string_rel_add_char ( WRBUF term_p,
WRBUF wsrc,
int * indx )

Definition at line 723 of file rpnsearch.c.

Referenced by string_relation().

◆ string_relation()

int string_relation ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char ** term_sub,
WRBUF term_dict,
const Odr_oid * attributeSet,
zebra_map_t zm,
int space_split,
WRBUF display_term,
int * error_code )
static

◆ string_term()

ZEBRA_RES string_term ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
const char ** term_sub,
WRBUF term_dict,
const Odr_oid * attributeSet,
NMEM stream,
struct grep_info * grep_info,
const char * index_type,
int complete_flag,
WRBUF display_term,
const char * xpath_use,
struct ord_list ** ol,
zebra_map_t zm,
size_t token_number )
static

◆ term_100()

int term_100 ( zebra_map_t zm,
const char ** src,
WRBUF term_dict,
int space_split,
WRBUF display_term )
static

◆ term_100_icu()

int term_100_icu ( zebra_map_t zm,
const char ** src,
WRBUF term_dict,
WRBUF display_term,
int mode,
size_t token_number )
static

Definition at line 312 of file rpnsearch.c.

References icu_basechars(), REGEX_CHARS, zebra_map_tokenize_next(), and zebra_map_tokenize_start().

Referenced by string_term().

◆ term_101()

int term_101 ( zebra_map_t zm,
const char ** src,
WRBUF term_dict,
int space_split,
WRBUF display_term )
static

Definition at line 411 of file rpnsearch.c.

References add_non_space(), CHR_SPACE, term_pre(), and zebra_maps_search().

Referenced by string_term().

◆ term_102()

int term_102 ( zebra_map_t zm,
const char ** src,
WRBUF term_dict,
int space_split,
WRBUF display_term )
static

Definition at line 494 of file rpnsearch.c.

References term_103().

Referenced by string_term().

◆ term_102_icu()

int term_102_icu ( zebra_map_t zm,
const char ** src,
WRBUF term_dict,
int space_split,
WRBUF display_term )
static

Definition at line 250 of file rpnsearch.c.

References icu_basechars(), REGEX_CHARS, zebra_map_tokenize_next(), and zebra_map_tokenize_start().

Referenced by string_term().

◆ term_103()

int term_103 ( zebra_map_t zm,
const char ** src,
WRBUF term_dict,
int * errors,
int space_split,
WRBUF display_term )
static

Definition at line 448 of file rpnsearch.c.

References add_non_space(), CHR_SPACE, term_pre(), and zebra_maps_search().

Referenced by string_term(), and term_102().

◆ term_104()

int term_104 ( zebra_map_t zm,
const char ** src,
WRBUF term_dict,
int space_split,
WRBUF display_term )
static

Definition at line 502 of file rpnsearch.c.

References add_non_space(), CHR_SPACE, term_pre(), and zebra_maps_search().

Referenced by string_term().

◆ term_105()

int term_105 ( zebra_map_t zm,
const char ** src,
WRBUF term_dict,
int space_split,
WRBUF display_term,
int right_truncate )
static

Definition at line 571 of file rpnsearch.c.

References add_non_space(), CHR_SPACE, term_pre(), and zebra_maps_search().

Referenced by string_term().

◆ term_pre()

int term_pre ( zebra_map_t zm,
const char ** src,
const char * ct1,
int first )
static

Definition at line 158 of file rpnsearch.c.

References CHR_SPACE, and zebra_maps_input().

Referenced by term_100(), term_101(), term_103(), term_104(), and term_105().

◆ xpath_trunc()

◆ zebra_term_limits_APT()

ZEBRA_RES zebra_term_limits_APT ( ZebraHandle zh,
Z_AttributesPlusTerm * zapt,
zint * hits_limit_value,
const char ** term_ref_id_str,
NMEM nmem )

Definition at line 943 of file rpnsearch.c.

References attr_find(), attr_find_ex(), attr_init_APT(), ZEBRA_OK, and ZINT_FORMAT.

Referenced by rpn_search_APT_numeric(), and search_term().

Variable Documentation

◆ log_level_rpn

◆ log_level_set

int log_level_set = 0
static

Definition at line 41 of file rpnsearch.c.