Example #1
0
def test_search_with_no_content(logger, mongodb, elastic):
    """Test search an empty system doesn't raise exceptions.
    """
    assert document.all() == []

    results = document.search()
    assert results['hits']['found'] == 0
def doc_search(request):
    """Handles quering of the stored documents.

    """
    log = get_log("doc_search")

    request_id = os.urandom(40).encode('hex')

    # TODO: actual query and and refine.
    #
    # return everything for the moment and emulate an Amazon search query
    # result set.
    #
    log.debug("request_id <{0}> request params <{1}>".format(
        request_id, request.params
    ))

    # Convert request.params from:
    #
    #   NestedMultiDict([
    #       (u'size', u'12'), (u'start', u'0'),
    #       (u'facet', u'price,retailer,designer,category,size,colour'),
    #       (u'facet-category-top-n', u'10000'),
    #       (u'q', u'skate board')
    #   ])
    #
    # To a handy dict:
    #
    # params = {
    #    u'facet': u'price,retailer,designer,category,size,colour',
    #    u'start': u'0', u'q': u'skate board',
    #    u'facet-category-top-n': u'10000', u'size': u'12'
    # }
    #
    # Ref:
    #  * http://docs.webob.org/en/latest/modules/webob.html
    #
    params = request.params.mixed()

    log.debug("params recovered <{0}>".format(params))

    rc = document.search(params)

    log.debug("returning <{0}> results found:\n{1}.".format(
        rc['hits']['found'],
        rc,
    ))

    return rc
Example #3
0
def doc_search(request):
    """Handles quering of the stored documents.

    """
    log = get_log("doc_search")

    request_id = binascii.hexlify(os.urandom(40)).decode()

    # TODO: actual query and and refine.
    #
    # return everything for the moment and emulate an Amazon search query
    # result set.
    #
    log.debug("request_id <{0}> request params <{1}>".format(
        request_id, request.params
    ))

    # Convert request.params from:
    #
    #   NestedMultiDict([
    #       (u'size', u'12'), (u'start', u'0'),
    #       (u'facet', u'price,retailer,designer,category,size,colour'),
    #       (u'facet-category-top-n', u'10000'),
    #       (u'q', u'skate board')
    #   ])
    #
    # To a handy dict:
    #
    # params = {
    #    u'facet': u'price,retailer,designer,category,size,colour',
    #    u'start': u'0', u'q': u'skate board',
    #    u'facet-category-top-n': u'10000', u'size': u'12'
    # }
    #
    # Ref:
    #  * http://docs.webob.org/en/latest/modules/webob.html
    #
    params = request.params.mixed()

    log.debug("params recovered <{0}>".format(params))

    rc = document.search(params)

    log.debug("returning <{0}> results found:\n{1}.".format(
        rc['hits']['found'],
        rc,
    ))

    return rc
Example #4
0
def test_basic_search(logger, mongodb, elastic):
    """Test searching the documents stored in mongodb.
    """
    assert document.all() == []

    doc = {
        "designer": "GearPro",
        "price": 12.60,
        "retailer": "MyShoppe",
        "brand_id": [7017],
        "size": [],
        "category": "",
        "name": "Pro Quad Clamp Purple",
        "colour": [],
        "brand": "98",
        "created_at": 1376391294
    }

    doc2 = {
        "designer": "GearPro",
        "price": 12.60,
        "retailer": "MyShoppe",
        "brand_id": [7016],
        "size": [],
        "category": "",
        "name": "Bike Pump Purple",
        "colour": [],
        "brand": "98",
        "created_at": 1376391294
    }

    example_sdf = [{
        "lang": "en",
        "fields": doc,
        "version": 1376497963,
        "type": "add",
        "id": 1246
    }, {
        "lang": "en",
        "fields": doc2,
        "version": 1376497963,
        "type": "add",
        "id": 1247
    }]

    rc = document.load(example_sdf)
    assert rc['status'] == 'ok'
    assert rc['adds'] == 2

    # return all:
    results = document.search()
    assert results['hits']['found'] == 2
    c = [{'id': '1247'}, {'id': '1246'}]
    c.sort()
    results['hits']['hit'].sort()
    assert results['hits']['hit'] == c

    # return a specific one:
    query = dict(q="pro")
    results = document.search(query)
    assert results['hits']['found'] == 1
    assert results['hits']['hit'] == [{'id': '1246'}]

    query = dict(q="myshop")
    results = document.search(query)
    assert results['hits']['found'] == 2
    c.sort()
    results['hits']['hit'].sort()
    assert results['hits']['hit'] == c

    query = dict(q="not in any string")
    results = document.search(query)
    assert results['hits']['found'] == 0
Example #5
0
def test_basic_search(logger, mongodb, elastic):
    """Test searching the documents stored in mongodb.
    """
    assert document.all() == []

    doc = {
        "designer": "GearPro",
        "price": 12.60,
        "retailer": "MyShoppe",
        "brand_id": [
            7017
        ],
        "size": [],
        "category": "",
        "name": "Pro Quad Clamp Purple",
        "colour": [],
        "brand": "98",
        "created_at": 1376391294
    }

    doc2 = {
        "designer": "GearPro",
        "price": 12.60,
        "retailer": "MyShoppe",
        "brand_id": [
            7016
        ],
        "size": [],
        "category": "",
        "name": "Bike Pump Purple",
        "colour": [],
        "brand": "98",
        "created_at": 1376391294
    }

    example_sdf = [
        {
            "lang": "en",
            "fields": doc,
            "version": 1376497963,
            "type": "add",
            "id": 1246
        },
        {
            "lang": "en",
            "fields": doc2,
            "version": 1376497963,
            "type": "add",
            "id": 1247
        }
    ]

    rc = document.load(example_sdf)
    assert rc['status'] == 'ok'
    assert rc['adds'] == 2

    # return all:
    results = document.search()
    assert results['hits']['found'] == 2
    expected = [
        {'id': '1246', 'fields': doc},
        {'id': '1247', 'fields': doc2},
    ]
    assert results['hits']['hit'] == expected

    # return a specific one:
    query = dict(q="pro")
    results = document.search(query)
    assert results['hits']['found'] == 1
    assert results['hits']['hit'] == [{'id': '1246', 'fields': doc}]

    # this should return two results for the text MyShoppe:
    query = dict(q="myshop")
    results = document.search(query)
    assert results['hits']['found'] == 2
    assert results['hits']['hit'] == expected

    query = dict(q="not in any string")
    results = document.search(query)
    assert results['hits']['found'] == 0

    # return in sdk format
    query = dict(q="pro", format="sdk")
    results = document.search(query)
    for key, value in doc.items():
        if not isinstance(value, list):
            doc[key] = [value]
    assert results['hits']['found'] == 1
    assert results['hits']['hit'] == [{'id': '1246', 'fields': doc}]
Example #6
0
def test_remove_then_search(logger, mongodb):
    """Test search after a removal of a document.
    """
    assert document.all() == []

    doc = {
        "designer": "98",
        "price": 1195,
        "retailer": "",
        "brand_id": [7017],
        "size": [],
        "category": "",
        "name": "Pro Quad Clamp Purple",
        "colour": [],
        "brand": "98",
        "created_at": 1376391294
    }

    example_add_sdf = [{
        "lang": "en",
        "fields": doc,
        "version": 1376497963,
        "type": "add",
        "id": 1246
    }]

    rc = document.load(example_add_sdf)

    assert rc['status'] == 'ok'
    assert rc['adds'] == 1
    assert rc['deletes'] == 0
    assert rc['error'] == ''
    assert rc['warning'] == ''

    report = document.report()

    assert len(report['documents_removed']) == 0
    assert len(report['documents']) == 1
    doc = report['documents'][0]
    assert doc["fields"]["name"] == "Pro Quad Clamp Purple"

    # Now remove the document from the store:
    #
    example_remove_sdf = [{"type": "delete", "id": "1246", "version": 2}]
    rc = document.load(example_remove_sdf)

    assert rc['status'] == 'ok'
    assert rc['adds'] == 0
    assert rc['deletes'] == 1
    assert rc['error'] == ''
    assert rc['warning'] == ''

    found = document.all()
    assert len(found) == 0

    report = document.report()

    assert len(report['documents_removed']) == 1
    assert len(report['documents']) == 0
    doc = report['documents_removed'][0]
    assert doc["fields"]["name"] == "Pro Quad Clamp Purple"

    # Now search for the document:
    #
    found = document.search({'q': 'Pro Quad Clamp Purple'})
    hits = found['hits']

    assert hits['found'] == 0