def test_search_q(self):
        solr_results = search(query={"SearchableText": "Document"})
        self.assertEqual(solr_results.hits, 2)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertIn(self.doc1.UID(), uids)
        self.assertIn(self.doc2.UID(), uids)
        self.assertNotIn(self.published_news.UID(), uids)
        self.assertNotIn(self.unpublished_doc.UID(), uids)
        self.assertNotIn(self.unpublished_news.UID(), uids)
        self.assertNotIn(self.event.UID(), uids)

        solr_results = search(query={"SearchableText": "lorem ipsum"})
        self.assertEqual(solr_results.hits, 2)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertIn(self.doc1.UID(), uids)
        self.assertIn(self.doc2.UID(), uids)

        solr_results = search(query={"SearchableText": "lorem amet"})
        self.assertEqual(solr_results.hits, 1)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertNotIn(self.doc1.UID(), uids)
        self.assertIn(self.doc2.UID(), uids)

        solr_results = search(query={"SearchableText": "lorem OR amet"})
        self.assertEqual(solr_results.hits, 2)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertIn(self.doc1.UID(), uids)
        self.assertIn(self.doc2.UID(), uids)
Example #2
0
    def test_maintenance_reindex(self):
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 0)
        self.reindex_view()
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 1)
        self.assertEqual(solr_results.docs[0]["UID"], self.published_doc.UID())

        # now, disable solr indexer and publish other two items
        set_registry_record("active", False, interface=IRerSolrpushSettings)
        api.content.transition(obj=self.news, transition="publish")
        api.content.transition(obj=self.unpublished_doc, transition="publish")
        commit()
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 1)

        # now, enable and reindex
        set_registry_record("active", True, interface=IRerSolrpushSettings)
        self.reindex_view()
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        # news items are not enabled
        self.assertEqual(solr_results.hits, 2)
        self.assertEqual(
            set(doc["UID"] for doc in solr_results.docs),
            set([self.published_doc.UID(),
                 self.unpublished_doc.UID()]),
        )
Example #3
0
    def test_maintenance_reindex_with_unwanted_types(self):
        self.reindex_view()
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 1)

        set_registry_record(
            "enabled_types",
            [u"Document", u"News Item"],
            interface=IRerSolrpushSettings,
        )
        api.content.transition(obj=self.news, transition="publish")
        api.content.transition(obj=self.unpublished_doc, transition="publish")
        commit()
        solr_results = search(query={
            "*": "*",
            "b_size": 100000
        },
                              fl="UID,portal_type")
        self.assertEqual(solr_results.hits, 3)

        set_registry_record("enabled_types", [u"Document"],
                            interface=IRerSolrpushSettings)
        self.reindex_view()
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        # News isn't removed because reindex view only reindex values from
        # Plone
        self.assertEqual(solr_results.hits, 3)
    def test_search_fl(self):
        """
        with fl we can select which fields solr returns for results
        """
        solr_results = search(query={"*": "*"})
        self.assertEqual(solr_results.hits, 3)
        for doc in solr_results.docs:
            self.assertIn("UID", list(doc.keys()))
            self.assertIn("Title", list(doc.keys()))

        solr_results = search(query={"*": "*"}, fl="UID")
        self.assertEqual(solr_results.hits, 3)
        for doc in solr_results.docs:
            self.assertIn("UID", list(doc.keys()))
            self.assertNotIn("Title", list(doc.keys()))

        solr_results = search(query={"*": "*"}, fl="UID Subject")
        self.assertEqual(solr_results.hits, 3)
        for doc in solr_results.docs:
            self.assertIn("UID", list(doc.keys()))
            self.assertNotIn("Title", list(doc.keys()))
            if not api.content.get(UID=doc["UID"]).Subject():
                self.assertNotIn("Subject", list(doc.keys()))
            else:
                self.assertIn("Subject", list(doc.keys()))
    def test_push_to_solr(self):
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 0)

        # try to push an indexable and published content
        push_to_solr(self.published_doc)
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 1)
        self.assertEqual(solr_results.docs[0]["UID"], self.published_doc.UID())

        # try to push an indexable and private content
        push_to_solr(self.unpublished_doc)
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 1)
        self.assertEqual(solr_results.docs[0]["UID"], self.published_doc.UID())

        # try to push a non indexable published content
        push_to_solr(self.published_news)
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 1)
        self.assertEqual(solr_results.docs[0]["UID"], self.published_doc.UID())

        # try to push a non indexable private content
        push_to_solr(self.unpublished_news)
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 1)
        self.assertEqual(solr_results.docs[0]["UID"], self.published_doc.UID())
Example #6
0
    def test_search_with_elevate(self):
        doc3 = api.content.create(container=self.portal,
                                  type="Document",
                                  title="Third page")
        # page with the shortest title containing keyword has the better score
        doc4 = api.content.create(container=self.portal,
                                  type="Document",
                                  title="page")
        api.content.transition(obj=doc3, transition="publish")
        api.content.transition(obj=doc4, transition="publish")
        commit()

        solr_results = search(query={
            "SearchableText": "page"
        },
                              fl=["UID", "Title", "[elevated]"]).docs
        self.assertEqual(len(solr_results), 4)
        self.assertEqual(
            solr_results[0],
            {
                "UID": doc4.UID(),
                "Title": doc4.Title(),
                "[elevated]": False
            },
        )

        # now let's set an elevate for third document
        value = json.dumps([{"text": [u"page"], "uid": [{"UID": doc3.UID()}]}])
        if six.PY2:
            value = value.decode("utf-8")
        set_registry_record(
            "elevate_schema",
            value,
            interface=IElevateSettings,
        )
        solr_results = search(query={
            "SearchableText": "page"
        },
                              fl=["UID", "Title", "[elevated]"]).docs
        self.assertEqual(len(solr_results), 4)
        self.assertEqual(
            solr_results[0],
            {
                "UID": doc3.UID(),
                "Title": doc3.Title(),
                "[elevated]": True
            },
        )
        self.assertEqual(
            solr_results[1],
            {
                "UID": doc4.UID(),
                "Title": doc4.Title(),
                "[elevated]": False
            },
        )
Example #7
0
    def test_search_bq(self):
        solr_results = search(query={"": "odd"}, fl=["UID", "id", "Title"])
        self.assertEqual(solr_results.hits, len(self.docs) / 2)
        self.assertNotEqual(solr_results.docs[0]["id"], "odd")

        set_registry_record("bq", u"id:odd", interface=IRerSolrpushSettings)
        commit()

        solr_results = search(query={"": "odd"}, fl=["UID", "id", "Title"])
        self.assertEqual(solr_results.hits, len(self.docs) / 2)
        self.assertEqual(solr_results.docs[0]["id"], "odd")
Example #8
0
    def test_search_qf(self):
        solr_results = search(query={"": "odd"}, fl=["UID", "id", "Title"])
        self.assertEqual(solr_results.hits, len(self.docs) / 2)
        self.assertNotEqual(solr_results.docs[0]["id"], "odd")

        set_registry_record(
            "qf",
            u"id^1000.0 SearchableText^1.0",
            interface=IRerSolrpushSettings,
        )
        commit()
        solr_results = search(query={"": "odd"}, fl=["UID", "id", "Title"])
        self.assertEqual(solr_results.hits, len(self.docs) / 2)
        self.assertEqual(solr_results.docs[0]["id"], "odd")
    def test_reset_solr(self):
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 0)

        api.content.transition(obj=self.unpublished_doc, transition="publish")
        # commit()
        # try to push an indexable and published content
        push_to_solr(self.published_doc)
        push_to_solr(self.unpublished_doc)
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 2)
        self.assertEqual(solr_results.docs[0]["UID"], self.published_doc.UID())

        # cleanup catalog
        reset_solr()
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 0)
Example #10
0
    def test_maintenance_sync(self):
        api.content.transition(obj=self.news, transition="publish")
        api.content.transition(obj=self.unpublished_doc, transition="publish")
        set_registry_record(
            "enabled_types",
            [u"Document", u"News Item"],
            interface=IRerSolrpushSettings,
        )
        self.reindex_view()
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 3)

        set_registry_record("enabled_types", [u"Document"],
                            interface=IRerSolrpushSettings)
        self.sync_view()
        solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
        self.assertEqual(solr_results.hits, 2)
 def test_search_all(self):
     solr_results = search(query={"*": "*"})
     # only published and indexable contents are on solr
     self.assertEqual(solr_results.hits, 3)
     uids = [x["UID"] for x in solr_results.docs]
     self.assertIn(self.doc1.UID(), uids)
     self.assertIn(self.doc2.UID(), uids)
     self.assertIn(self.published_news.UID(), uids)
     self.assertNotIn(self.unpublished_doc.UID(), uids)
     self.assertNotIn(self.unpublished_news.UID(), uids)
     self.assertNotIn(self.event.UID(), uids)
 def test_search_sort_on(self):
     """"""
     # update modification date
     time.sleep(1)
     self.doc2.reindexObject()
     commit()
     solr_results = search(query={
         "portal_type": "Document",
         "sort_on": "modified"
     })
     self.assertEqual(solr_results.hits, 2)
     self.assertEqual(solr_results.docs[0]["UID"], self.doc1.UID())
     self.assertEqual(solr_results.docs[1]["UID"], self.doc2.UID())
     solr_results = search(
         query={
             "portal_type": "Document",
             "sort_on": "modified",
             "sort_order": "reverse",
         })
     self.assertEqual(solr_results.hits, 2)
     self.assertEqual(solr_results.docs[0]["UID"], self.doc2.UID())
     self.assertEqual(solr_results.docs[1]["UID"], self.doc1.UID())
    def test_update_content(self):
        push_to_solr(self.published_doc)
        solr_results = search(query={
            "*": "*",
            "b_size": 100000
        },
                              fl="UID Description")
        self.assertEqual(solr_results.hits, 1)
        self.assertEqual(solr_results.docs[0]["UID"], self.published_doc.UID())
        self.assertEqual(solr_results.docs[0].get("Description", ""), "")

        self.published_doc.setDescription("foo description")
        push_to_solr(self.published_doc)
        solr_results = search(query={
            "*": "*",
            "b_size": 100000
        },
                              fl="UID Description")
        self.assertEqual(solr_results.hits, 1)
        self.assertEqual(solr_results.docs[0]["UID"], self.published_doc.UID())
        self.assertIn("Description", solr_results.docs[0])
        self.assertEqual(solr_results.docs[0]["Description"],
                         "foo description")
Example #14
0
    def test_search_words_case_insensitive(self):
        """because it's indexed as lowercase"""
        obj = api.content.create(
            container=self.portal,
            type="Document",
            id="insensitive",
            title="Insensitive",
            searchwords=["FOO", "bar", "bAz"],
        )
        api.content.transition(obj=obj, transition="publish")

        commit()

        self.assertEqual(
            search(
                query={"searchwords": "FOO"}, fl=["UID", "id", "Title"]
            ).hits,
            1,
        )
        self.assertEqual(
            search(
                query={"searchwords": "foo"}, fl=["UID", "id", "Title"]
            ).hits,
            1,
        )

        self.assertEqual(
            search(
                query={"searchwords": "bar"}, fl=["UID", "id", "Title"]
            ).hits,
            1,
        )
        self.assertEqual(
            search(
                query={"searchwords": "Bar"}, fl=["UID", "id", "Title"]
            ).hits,
            1,
        )

        self.assertEqual(
            search(
                query={"searchwords": "baz"}, fl=["UID", "id", "Title"]
            ).hits,
            1,
        )
        self.assertEqual(
            search(
                query={"searchwords": "BAZ"}, fl=["UID", "id", "Title"]
            ).hits,
            1,
        )
Example #15
0
 def get_terms(self):
     solr_results = search(
         query={
             "*": "*",
             "b_size": 1
         },
         fl="UID",
         facets=True,
         facet_fields=self.facet_field,
     )
     if isinstance(solr_results, dict) and solr_results.get("error", False):
         return []
     facets = solr_results.facets["facet_fields"].get(self.facet_field, [])
     if not facets:
         return []
     terms = []
     for facet in facets:
         for key in facet.keys():
             terms.append(
                 SimpleTerm(value=key, token=key.encode("utf-8"),
                            title=key))
     return terms
Example #16
0
 def test_search_odd(self):
     solr_results = search(query={"SearchableText": "odd"}, fl="UID")
     self.assertEqual(solr_results.hits, len(self.docs) / 2)
Example #17
0
 def test_items_are_unindexed_when_set_false(self):
     self.document.showinsearch = False
     self.document.reindexObject()
     commit()
     solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
     self.assertEqual(solr_results.hits, 1)
Example #18
0
 def test_items_are_indexed_by_default(self):
     solr_results = search(query={"*": "*", "b_size": 100000}, fl="UID")
     self.assertEqual(solr_results.hits, 2)
    def test_search_fq(self):
        #  same result if we search by portal_type
        solr_results = search(query={"portal_type": "Document"})
        self.assertEqual(solr_results.hits, 2)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertIn(self.doc1.UID(), uids)
        self.assertIn(self.doc2.UID(), uids)
        self.assertNotIn(self.published_news.UID(), uids)
        self.assertNotIn(self.unpublished_doc.UID(), uids)
        self.assertNotIn(self.unpublished_news.UID(), uids)
        self.assertNotIn(self.event.UID(), uids)

        solr_results = search(query={"portal_type": "News Item"})
        self.assertEqual(solr_results.hits, 1)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertNotIn(self.doc1.UID(), uids)
        self.assertNotIn(self.doc2.UID(), uids)
        self.assertIn(self.published_news.UID(), uids)
        self.assertNotIn(self.unpublished_doc.UID(), uids)
        self.assertNotIn(self.unpublished_news.UID(), uids)
        self.assertNotIn(self.event.UID(), uids)

        solr_results = search(query={"Subject": "foo"})
        self.assertEqual(solr_results.hits, 2)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertIn(self.doc1.UID(), uids)
        self.assertNotIn(self.doc2.UID(), uids)
        self.assertIn(self.published_news.UID(), uids)
        self.assertNotIn(self.unpublished_doc.UID(), uids)
        self.assertNotIn(self.unpublished_news.UID(), uids)
        self.assertNotIn(self.event.UID(), uids)

        solr_results = search(query={"Subject": "bar"})
        self.assertEqual(solr_results.hits, 1)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertIn(self.doc1.UID(), uids)
        self.assertNotIn(self.doc2.UID(), uids)
        self.assertNotIn(self.published_news.UID(), uids)
        self.assertNotIn(self.unpublished_doc.UID(), uids)
        self.assertNotIn(self.unpublished_news.UID(), uids)
        self.assertNotIn(self.event.UID(), uids)

        solr_results = search(query={"Subject": ["foo", "bar"]})
        self.assertEqual(solr_results.hits, 2)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertIn(self.doc1.UID(), uids)
        self.assertNotIn(self.doc2.UID(), uids)
        self.assertIn(self.published_news.UID(), uids)
        self.assertNotIn(self.unpublished_doc.UID(), uids)
        self.assertNotIn(self.unpublished_news.UID(), uids)
        self.assertNotIn(self.event.UID(), uids)

        solr_results = search(query={"Subject": ["news category"]})
        self.assertEqual(solr_results.hits, 1)
        uids = [x["UID"] for x in solr_results.docs]
        self.assertNotIn(self.doc1.UID(), uids)
        self.assertNotIn(self.doc2.UID(), uids)
        self.assertIn(self.published_news.UID(), uids)
        self.assertNotIn(self.unpublished_doc.UID(), uids)
        self.assertNotIn(self.unpublished_news.UID(), uids)
        self.assertNotIn(self.event.UID(), uids)
Example #20
0
 def test_all_items(self):
     solr_results = search(query={}, fl="UID")
     self.assertEqual(solr_results.hits, len(self.docs))