Beispiel #1
0
def search_unit(query, f, m, wl=None):
    """Search in fulltext."""
    from invenio.legacy.search_engine import (search_unit_in_bibwords,
                                              search_pattern)
    from invenio.legacy.miscutil.solrutils_bibindex_searcher import (
        solr_get_bitset)
    from invenio.legacy.miscutil.xapianutils_bibindex_searcher import (
        xapian_get_bitset)
    from ...utils import get_idx_indexer

    def fix(p):
        if m and (m == 'a' or m == 'r'):  # phrase/regexp query
            if p.startswith('%') and p.endswith('%'):
                p = p[1:-1]  # fix for partial phrase
            p = '"' + p + '"'
        return p

    indexers = {
        'SOLR': solr_get_bitset,
        'XAPIAN': xapian_get_bitset,
    }
    indexer = get_idx_indexer('fulltext')
    if indexer in indexers and \
            current_app.config.get('CFG_{}_ENABLED'.format(indexer), False):
        try:
            indexers[indexer](fix(query), f, m)
        except:
            current_app.logger.exception("Fulltext search is broken.")
            return intbitset()
    elif m == 'a' or m == 'r':
        # FIXME: workaround for not having phrase index yet
        return search_pattern(p=query, f=f, m='w')
    # FIXME raise ContinueSearch(query, f, m, wl)
    return search_unit_in_bibwords(query, f, wl=wl)
Beispiel #2
0
def search_unit(query, f, m, wl=None):
    """Search in fulltext."""
    from invenio.legacy.search_engine import (search_unit_in_bibwords,
                                              search_pattern)
    if m == 'a' or m == 'r':
        # FIXME: workaround for not having phrase index yet
        return search_pattern(p=query, f=f, m='w')
    # FIXME raise ContinueSearch(query, f, m, wl)
    return search_unit_in_bibwords(query, f, wl=wl)
Beispiel #3
0
def search_unit(query, f, m, wl=None):
    """Search in fulltext."""
    from invenio.legacy.search_engine import (
        search_unit_in_bibwords, search_pattern
    )
    if m == 'a' or m == 'r':
        # FIXME: workaround for not having phrase index yet
        return search_pattern(p=query, f=f, m='w')
    # FIXME raise ContinueSearch(query, f, m, wl)
    return search_unit_in_bibwords(query, f, wl=wl)
Beispiel #4
0
def search_unit(query, f, m, wl=None):
    """Search for records in collection query.

    Example:

    .. code-block:: text

        collection:"BOOK"
        collection:"Books"
    """
    from invenio.legacy.search_engine import (get_collection_reclist,
                                              search_unit_in_bibwords)
    if len(query):
        ahitset = get_collection_reclist(query)
        if not ahitset:
            return search_unit_in_bibwords(query, 'collection', m, wl=wl)
        return ahitset
    else:
        return intbitset([])
Beispiel #5
0
def search_unit(query, f, m, wl=None):
    """Search for records in collection query.

    Example:

    .. code-block:: text

        collection:"BOOK"
        collection:"Books"
    """
    from invenio.legacy.search_engine import (
        get_collection_reclist, search_unit_in_bibwords
    )
    if len(query):
        ahitset = get_collection_reclist(query)
        if not ahitset:
            return search_unit_in_bibwords(query, 'collection', m, wl=wl)
        return ahitset
    else:
        return intbitset([])
Beispiel #6
0
def search_unit(query, f, m, wl=None):
    """Search in fulltext."""
    from invenio.legacy.search_engine import (
        search_unit_in_bibwords, search_pattern
    )
    from invenio.legacy.miscutil.solrutils_bibindex_searcher import (
        solr_get_bitset
    )
    from invenio.legacy.miscutil.xapianutils_bibindex_searcher import (
        xapian_get_bitset
    )
    from ...utils import get_idx_indexer

    def fix(p):
        if m and (m == 'a' or m == 'r'):  # phrase/regexp query
            if p.startswith('%') and p.endswith('%'):
                p = p[1:-1]  # fix for partial phrase
            p = '"' + p + '"'
        return p

    indexers = {
        'SOLR': solr_get_bitset,
        'XAPIAN': xapian_get_bitset,
    }
    indexer = get_idx_indexer('fulltext')
    if indexer in indexers and \
            current_app.config.get('CFG_{}_ENABLED'.format(indexer), False):
        try:
            indexers[indexer](fix(query), f, m)
        except:
            current_app.logger.exception("Fulltext search is broken.")
            return intbitset()
    elif m == 'a' or m == 'r':
        # FIXME: workaround for not having phrase index yet
        return search_pattern(p=query, f=f, m='w')
    # FIXME raise ContinueSearch(query, f, m, wl)
    return search_unit_in_bibwords(query, f, wl=wl)