def test_author_bai_malformed():
    query = IQ('a r.j.hill.1', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_google_style_and_not_collaboration():
    query = IQ("raffaele d'agnolo and not cn cms", LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author():
    query = IQ('a kondrashuk', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_type_code_colon():
    query = IQ('tc: l', LiteratureSearch())

    expected = {'multi_match': {'query': 'l', 'fields': ['collection']}}
    result = query.to_dict()

    assert expected == result
def test_find_exactauthor_not_affiliation_uppercase():
    query = IQ('FIND EA RINALDI, MASSIMILIANO NOT AFF SINCROTRONE TRIESTE',
               LiteratureSearch())

    expected = {
        "bool": {
            "must_not": [{
                "multi_match": {
                    "query": "SINCROTRONE TRIESTE",
                    "fields":
                    ["authors.affiliations.value", "corporate_author"]
                }
            }],
            "must": [{
                "multi_match": {
                    "query":
                    "RINALDI, MASSIMILIANO",
                    "fields": [
                        "exactauthor.raw", "authors.full_name",
                        "authors.alternative_names", "authors.ids.value"
                    ]
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_field_code_colon():
    query = IQ('fc: a', LiteratureSearch())

    expected = {'multi_match': {'query': 'a', 'fields': ['field_code']}}
    result = query.to_dict()

    assert expected == result
def test_journal_colon():
    query = IQ('journal:TODO', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_or_author():
    query = IQ('a fileviez perez,p or p. f. perez', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_and_not_type_code():
    query = IQ('a nilles,h and not tc I', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_bai():
    query = IQ('find a r.j.hill.1', LiteratureSearch())

    expected = {
        "bool": {
            "must": [{
                "bool": {
                    "should": [{
                        "match": {
                            "authors.name_variations": "r.j.hill.1"
                        }
                    }, {
                        "term": {
                            "authors.ids.value": "r.j.hill.1"
                        }
                    }]
                }
            }],
            "should": [{
                "match": {
                    "authors.full_name": "r.j.hill.1"
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_find_type_code():
    query = IQ('find tc book', LiteratureSearch())

    expected = {'multi_match': {'query': 'book', 'fields': ['collection']}}
    result = query.to_dict()

    assert expected == result
def test_find_report():
    query = IQ('find r atlas-conf-*', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_find_date():
    query = IQ('fin date > today', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_find_country_code():
    query = IQ('find cc italy', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_exactauthor_colon():
    query = IQ('ea:matt visser', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_exactauthor():
    query = IQ('ea wu, xing gang')

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_exactauthor_colon_and_collection_colon():
    query = IQ('ea: matt visser AND collection:citeable', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_colon_with_double_quotes():
    query = IQ('author:"tachikawa, yuji"', LiteratureSearch())

    expected = {
        "bool": {
            "must": [{
                "bool": {
                    "should": [{
                        "match": {
                            "authors.name_variations": "tachikawa, yuji"
                        }
                    }, {
                        "term": {
                            "authors.ids.value": "tachikawa, yuji"
                        }
                    }]
                }
            }],
            "should": [{
                "match": {
                    "authors.full_name": "tachikawa, yuji"
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_fulltext_colon():
    query = IQ('fulltext:TODO', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_colon_bai():
    query = IQ('author:Y.Nomura.1', LiteratureSearch())

    expected = {
        'bool': {
            'must': [{
                'bool': {
                    'should': [{
                        'match': {
                            u'authors.name_variations': 'Y.Nomura.1'
                        }
                    }, {
                        'term': {
                            u'authors.ids.value': 'Y.Nomura.1'
                        }
                    }]
                }
            }],
            'should': [{
                'match': {
                    u'authors.full_name': 'Y.Nomura.1'
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_topcite_colon():
    query = IQ('topcite:200+', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_colon_bai_with_double_quotes_and_collection_colon():
    query = IQ('author:"E.Witten.1" AND collection:citeable',
               LiteratureSearch())

    expected = {
        'bool': {
            'must': [{
                'bool': {
                    'should': [{
                        'match': {
                            u'authors.name_variations': 'E.Witten.1'
                        }
                    }, {
                        'term': {
                            u'authors.ids.value': 'E.Witten.1'
                        }
                    }]
                }
            }, {
                'multi_match': {
                    'fields': ['collections.primary'],
                    'query': 'citeable'
                }
            }],
            'should': [{
                'match': {
                    u'authors.full_name': 'E.Witten.1'
                }
            }]
        }
    }

    result = query.to_dict()

    assert expected == result
def test_google_style_or_google_style():
    query = IQ('sungtae cho or 1301.7261', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_citedby_colon():
    query = IQ('citedby:foobar', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_find_author():
    query = IQ('find a polchinski', LiteratureSearch())

    expected = {
        "bool": {
            "must": [{
                "bool": {
                    "should": [{
                        "match": {
                            "authors.name_variations": "polchinski"
                        }
                    }, {
                        "term": {
                            "authors.ids.value": "polchinski"
                        }
                    }]
                }
            }],
            "should": [{
                "match": {
                    "authors.full_name": "polchinski"
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_citedby_colon_recid_colon():
    query = IQ('citedby:recid:902780', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_find_author_uppercase():
    query = IQ('FIND A W F CHANG', LiteratureSearch())

    expected = {
        "bool": {
            "must": [{
                "bool": {
                    "should": [{
                        "match": {
                            "authors.name_variations": "W F CHANG"
                        }
                    }, {
                        "term": {
                            "authors.ids.value": "W F CHANG"
                        }
                    }]
                }
            }],
            "should": [{
                "match": {
                    "authors.full_name": "W F CHANG"
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_eprint_colon_without_arxiv():
    query = IQ('eprint:TODO', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
Ejemplo n.º 29
0
def inspire_search_factory(self, search):
    """Parse query using Invenio-Query-Parser.

    :param self: REST view.
    :param search: Elastic search DSL search instance.
    :returns: Tuple with search instance and URL arguments.
    """
    from invenio_records_rest.facets import default_facets_factory
    from invenio_records_rest.sorter import default_sorter_factory

    query_string = request.values.get('q', '')

    try:
        search = search.query(IQ(query_string, search))
    except SyntaxError:
        current_app.logger.debug("Failed parsing query: {0}".format(
            request.values.get('q', '')),
                                 exc_info=True)
        raise InvalidQueryRESTError()
    finally:
        if current_app.debug:
            current_app.logger.debug(json.dumps(search.to_dict(), indent=4))

    search_index = search._index[0]
    search, urlkwargs = default_facets_factory(search, search_index)
    search, sortkwargs = default_sorter_factory(search, search_index)
    for key, value in sortkwargs.items():
        urlkwargs.add(key, value)

    urlkwargs.add('q', query_string)
    return search, urlkwargs
Ejemplo n.º 30
0
def test_author_colon_bai_with_double_quotes_and_collection_colon():
    query = IQ('author:"E.Witten.1" AND collection:citeable',
               LiteratureSearch())

    expected = {
        "bool": {
            "should": [{
                "match": {
                    "authors.full_name": "E.Witten.1"
                }
            }],
            "must": [{
                "bool": {
                    "should": [{
                        "match": {
                            "authors.name_variations": "E.Witten.1"
                        }
                    }, {
                        "term": {
                            "authors.inspire_bai": "E.Witten.1"
                        }
                    }]
                }
            }, {
                "multi_match": {
                    "query": "citeable",
                    "fields": ["collections.primary"]
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result