コード例 #1
0
def test_fieldnames():
    p = default.QueryParser("t", None, [plugins.WhitespacePlugin(),
                                        plugins.FieldsPlugin(),
                                        plugins.GroupPlugin()])
    ns = p.process("a:b c d:(e f:(g h)) i j:")
    assert_equal(repr(ns), "<AndGroup <'a':'b'>, <None:'c'>, <AndGroup <'d':'e'>, <AndGroup <'f':'g'>, <'f':'h'>>>, <None:'i'>, <None:'j:'>>")
    assert_equal(repr(p.process("a:b:")), "<AndGroup <'a':'b:'>>")
コード例 #2
0
ファイル: query.py プロジェクト: rhodricusack/kerko
def build_keywords_query(keywords):
    """
    Build parsers for a query.

    :param MultiDict keywords: The search texts keyed by scope key. If empty,
        the query will match every documents.
    """
    queries = []
    if keywords:
        composer = current_app.config['KERKO_COMPOSER']
        text_plugins = [
            plugins.PhrasePlugin(),
            plugins.GroupPlugin(),
            plugins.OperatorsPlugin(
                And=r"(?<=\s)" + re.escape(gettext("AND")) + r"(?=\s)",
                Or=r"(?<=\s)" + re.escape(gettext("OR")) + r"(?=\s)",
                Not=r"(^|(?<=(\s|[()])))" + re.escape(gettext("NOT")) + r"(?=\s)",
                AndNot=None,
                AndMaybe=None,
                Require=None
            ),
            plugins.BoostPlugin(),
        ]
        for key, value in keywords.items(multi=True):
            fields = [spec.key for spec in composer.fields.values() if key in spec.scopes]
            if not fields:
                raise KeyError  # No known field for that scope key.
            parser = MultifieldParser(
                fields, schema=composer.schema, plugins=text_plugins
            )
            queries.append(parser.parse(value))
    else:
        queries.append(Every())
    return And(queries)
コード例 #3
0
ファイル: test_parsing.py プロジェクト: datakortet/whoosh
def test_groups():
    p = default.QueryParser("t", None, [plugins.WhitespacePlugin(),
                                        plugins.GroupPlugin()])

    ns = p.process("a ((b c) d) e")
    assert_equal(repr(ns),
                 "<AndGroup <None:'a'>, <AndGroup <AndGroup <None:'b'>, " +
                 "<None:'c'>>, <None:'d'>>, <None:'e'>>")
コード例 #4
0
 def _query_parser_plugins(self):
     return [
         plugins.WhitespacePlugin(),
         plugins.SingleQuotePlugin(),
         plugins.FieldsPlugin(),
         plugins.PrefixPlugin(),
         plugins.GroupPlugin(),
         plugins.OperatorsPlugin(),
         plugins.BoostPlugin()]
コード例 #5
0
def test_boost():
    p = default.QueryParser("t", None, [plugins.WhitespacePlugin(),
                                        plugins.GroupPlugin(),
                                        plugins.BoostPlugin()])
    ns = p.tag("a^3")
    assert_equal(repr(ns), "<AndGroup <None:'a'>, <^ 3.0>>")
    ns = p.filterize(ns)
    assert_equal(repr(ns), "<AndGroup <None:'a' ^3.0>>")

    assert_equal(repr(p.process("a (b c)^2.5")), "<AndGroup <None:'a'>, <AndGroup <None:'b'>, <None:'c'> ^2.5>>")
    assert_equal(repr(p.process("a (b c)^.5 d")), "<AndGroup <None:'a'>, <AndGroup <None:'b'>, <None:'c'> ^0.5>, <None:'d'>>")
    assert_equal(repr(p.process("^2 a")), "<AndGroup <None:'^2'>, <None:'a'>>")
    assert_equal(repr(p.process("a^2^3")), "<AndGroup <None:'a^2' ^3.0>>")
コード例 #6
0
    def default_set(self):
        """Returns the default list of plugins to use.
        """

        from whoosh.qparser import plugins

        return [plugins.WhitespacePlugin(),
                plugins.SingleQuotePlugin(),
                plugins.FieldsPlugin(),
                plugins.WildcardPlugin(),
                plugins.PhrasePlugin(),
                plugins.RangePlugin(),
                plugins.GroupPlugin(),
                plugins.OperatorsPlugin(),
                plugins.BoostPlugin(),
                plugins.EveryPlugin(),
                ]
コード例 #7
0
ファイル: test_parsing.py プロジェクト: sangensong/whoosh-1
def test_groups_with_range():
    p = default.QueryParser("t", None, [
        plugins.FieldsPlugin(),
        plugins.GtLtPlugin(),
        plugins.GroupPlugin(),
        plugins.OperatorsPlugin(),
        plugins.PhrasePlugin(),
        plugins.RangePlugin(),
        plugins.RegexPlugin()
    ])

    ns = p.process('a:b OR e:>=5 g:<6')
    assert repr(
        ns
    ) == "<AndGroup <OrGroup <'a':'b'>, <'e':['5' None]>>, <'g':[None '6'}>>"

    ns = p.process('a:b OR (e:>=5 g:<6)')
    assert repr(
        ns
    ) == "<AndGroup <OrGroup <'a':'b'>, <AndGroup <'e':['5' None]>, <'g':[None '6'}>>>>"