Coder Social home page Coder Social logo

querqy / smui Goto Github PK

View Code? Open in Web Editor NEW
52.0 12.0 24.0 1.63 MB

Search Management UI

License: Apache License 2.0

TypeScript 20.83% HTML 11.51% CSS 1.37% JavaScript 0.62% Scala 64.34% Shell 0.94% Makefile 0.03% Dockerfile 0.35%
smui ecommerce ecommerce-search relevant-search relevancy search-engine solr search-management

smui's Introduction

Build Querqy Docker Integration Tests for Querqy Querqy for Solr Querqy Core

⚠️ IMPORTANT: Querqy 5.5 for Solr introduces some breaking changes that will affect you if you are upgrading from an older version and if

  • you are using Info Logging, or
  • rely on the debug output format, or
  • you are using a custom rewriter implementation

See here for the release notes: https://querqy.org/docs/querqy/release-notes.html#major-changes-in-querqy-for-solr-5-5-1

Querqy

Querqy is a framework for query preprocessing in Java-based search engines.

This is the repository for querqy-core, querqy-lucene and querqy-solr. Repositories for further Querqy integrations can be found at:

Documentation and 'Getting started'

Visit docs.querqy.org/querqy/ for detailed documentation.

Please make sure you read the release notes!

Check out Querqy.org for related projects that help you speed up search software development.

Developer channel: Join #querqy on the Relevance & Matching Tech Slack space

License

Querqy is licensed under the Apache License, Version 2.

Contributing

Please read our developer guidelines before contributing.

smui's People

Contributors

arafalov avatar dependabot[bot] avatar dobestler avatar epugh avatar gunnarbusch avatar jclapadula avatar linuxswords avatar marcopriebe avatar migo avatar mkr avatar paul-blanchaert avatar pbartusch avatar recombinationgroup avatar renekrie avatar schnoddelbotz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smui's Issues

Ability to create tags in the UI/API

Tags are either administrator defined or created on import. There doesn't seem to be a way in the SMUI UI/API to create tags.

Looking at the other options in the API, there is no PUT/POST for inputTags:

https://github.com/querqy/smui/blob/master/conf/routes

As an end user, it would be great to be able to type in the tags box and if it doesn't exist create the tag. This should only be allowed when there are no predefined tags.

First start: Database 'default' is in an inconsistent state!

Hi,

I am trying to start smui for the first time.
I pulled latest container from docker and I also pulled latest MySQL 8.0.19.
I initialized database by executing 3 sql rows from readme file.

I tried to start smui with this line:

docker run -p 9000:9000 --network smui -e SMUI_DB_URL="jdbc:mysql://smui-mysql/smui?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" -v /tmp/smui_deployment_path:/home/hex/solr-8.4.1/server/solr/bmaxpoc/conf pbartusch/smui

I receive following exception:

[info] p.a.d.DefaultDBApi - Database [default] initialized at jdbc:mysql://smui-mysql/smui?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
[info] application - Creating Pool for datasource 'default'
[info] c.z.h.HikariDataSource - HikariPool-1 - Starting...
[info] c.z.h.HikariDataSource - HikariPool-1 - Start completed.
[info] a.e.s.Slf4jLogger - Slf4jLogger started
[error] p.a.d.e.DefaultEvolutionsApi - Specified key was too long; max key length is 3072 bytes [ERROR:1071, SQLSTATE:42000]
Oops, cannot start the server.
@7fb8ak588: Database 'default' is in an inconsistent state![An evolution has not been applied properly. Please check the problem and resolve it manually before marking it as resolved.]
at play.api.db.evolutions.DatabaseEvolutions.$anonfun$checkEvolutionsState$3(EvolutionsApi.scala:309)
at play.api.db.evolutions.DatabaseEvolutions.$anonfun$checkEvolutionsState$3$adapted(EvolutionsApi.scala:294)
at play.api.db.evolutions.DatabaseEvolutions.executeQuery(EvolutionsApi.scala:341)
at play.api.db.evolutions.DatabaseEvolutions.checkEvolutionsState(EvolutionsApi.scala:294)
at play.api.db.evolutions.DatabaseEvolutions.evolve(EvolutionsApi.scala:263)
at play.api.db.evolutions.DefaultEvolutionsApi.evolve(EvolutionsApi.scala:104)
at play.api.db.evolutions.ApplicationEvolutions.$anonfun$start$2(ApplicationEvolutions.scala:80)
at play.api.db.evolutions.ApplicationEvolutions.$anonfun$start$2$adapted(ApplicationEvolutions.scala:68)
at play.api.db.evolutions.ApplicationEvolutions$.$anonfun$runEvolutions$1(ApplicationEvolutions.scala:211)
at play.api.db.evolutions.ApplicationEvolutions$.withLock(ApplicationEvolutions.scala:232)
at play.api.db.evolutions.ApplicationEvolutions$.runEvolutions(ApplicationEvolutions.scala:202)
at play.api.db.evolutions.ApplicationEvolutions.$anonfun$start$1(ApplicationEvolutions.scala:68)
at play.api.db.evolutions.ApplicationEvolutions.$anonfun$start$1$adapted(ApplicationEvolutions.scala:63)
at scala.collection.immutable.List.foreach(List.scala:389)
at play.api.db.evolutions.ApplicationEvolutions.start(ApplicationEvolutions.scala:63)
at play.api.db.evolutions.ApplicationEvolutions.(ApplicationEvolutions.scala:109)
at play.api.db.evolutions.ApplicationEvolutionsProvider.get$lzycompute(EvolutionsModule.scala:68)
at play.api.db.evolutions.ApplicationEvolutionsProvider.get(EvolutionsModule.scala:61)
at play.api.db.evolutions.ApplicationEvolutionsProvider.get(EvolutionsModule.scala:51)
at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:85)
at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:77)
at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:59)
at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:61)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:168)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:39)
at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:211)
at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:182)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109)
at com.google.inject.Guice.createInjector(Guice.java:87)
at com.google.inject.Guice.createInjector(Guice.java:78)
at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:201)
at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:156)
at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:22)
at play.core.server.ProdServerStart$.start(ProdServerStart.scala:59)
at play.core.server.ProdServerStart$.main(ProdServerStart.scala:31)

We need a favicon!

We need a favicon! If for no other reason, to silence the warning in the Console ;-). SMUI needs a mascot!

Refactor & test deployment configuration (e.g. RulesTxtDeploymentService) for Elasticsearch support

Deployment possibilities for SMUI have grown rapidly. The configuration is hard to understand & corresponding code is hard to maintain - this includes:

  • RulesTxtDeploymentService
  • application.conf

especially.

Approach:

Step#1: document all deployment possibilities, that should be supported by SMUI (already take future Elasticsearch support , #43 , into account).
Step#2: derive a config schema (for application.conf).
Step#3: refactor the code (breaking change)

minor compile WARN in QuerqyReplaceRulesGenerator.scala

fix:

[warn] [...]/smui/app/models/querqy/QuerqyReplaceRulesGenerator.scala:30:12: patterns after a variable pattern cannot match (SLS 8.1.1)
[warn]       case rule => validateQuerqyReplaceRulesTxtToErrMsg(rule)
[warn]            ^
[warn] [...]/smui/app/models/querqy/QuerqyReplaceRulesGenerator.scala:31:17: unreachable code due to variable pattern 'rule' on line 30
[warn]       case _ => None
[warn]                 ^
[warn] two warnings found

Running with Docker

I am going through the documentation, my Docker skills are not fantastic, would be great to get some examples of how to run SMUI using docker. Think about configuring the database connection and exposing ports, etc.

Can you extend the documentation with some examples?

The the below docker-compose I seem to be having something running.

version: "3"

services:
  solr:
    container_name: my_solr
    build:
      context: .
      dockerfile: ./Dockerfile
    image: my_solr
    restart: "no"
    volumes:
      - "./solrdata/:/var/solr/"
    ports:
      - "8983:8983"

  db:
    image: mysql:5.7
    restart: "no"
    environment:
      MYSQL_DATABASE: 'smui'
      # So you don't have to use root, but you can if you like
      MYSQL_USER: 'smui'
      # You can use whatever password you like
      MYSQL_PASSWORD: 'smui'
      # Password for root access
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      # <Port exposed> : < MySQL Port running inside container>
      - '3306:3306'
    expose:
      # Opens port 3306 on the container
      - '3306'
      # Where our data will be persisted
    volumes:
      - ./mysql-db:/var/lib/mysql

  smui:
    image: pbartusch/smui
    restart: "no"
    environment:
      - "SMUI_DB_URL=jdbc:mysql://db:3306/smui?autoReconnect=true&useSSL=false"
    ports:
      - "9000:9000"
    expose:
      - '9000'

The final bit I need to figure out is how to write the config, at the moment I get this error:
play.api.UnexpectedException: Unexpected exception[IOException: Cannot run program "/smui/conf/smui2solr.sh": error=2, No such file or directory]

Empty rule input must not be accepted

  1. I have SMUI open.
  2. I click on the green +New button next to the 'Search or Create Item' in the top left corner (without entering a term)
  3. I get a pop-up 'Add new rule management or spelling item'
  4. I choose 'Rule Management' (green button)
  5. I repeat 2.-4. - an unexpected empty line shows up in the items list on the left

Internal Server Error when generating report

Hi

We receive an Internal Server Error when trying to generate a report:
The request is sent to /api/v1/report/activity-report/foo?dateFrom=2020-06-25&dateTo=2022-06-15.

The server logs show the following:

play.api.UnexpectedException: Unexpected exception[NoSuchElementException: head of empty list]
	at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:347)
	at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:267)
	at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:448)
	at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:446)
	at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:417)
	at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:41)
	at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
	at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
	at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:92)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
Caused by: java.util.NoSuchElementException: head of empty list
	at scala.collection.immutable.Nil$.head(List.scala:430)
	at scala.collection.immutable.Nil$.head(List.scala:427)
	at models.eventhistory.InputEvent$.isEventForSolrIndex$1(InputEvent.scala:311)
	at models.eventhistory.InputEvent$.$anonfun$allChangedInputIdsForSolrIndexIdInPeriod$1(InputEvent.scala:317)
	at models.eventhistory.InputEvent$.$anonfun$allChangedInputIdsForSolrIndexIdInPeriod$1$adapted(InputEvent.scala:317)
	at scala.collection.TraversableLike.allIn$1(TraversableLike.scala:320)
	at scala.collection.TraversableLike.noneIn$1(TraversableLike.scala:307)
	at scala.collection.TraversableLike.filterImpl(TraversableLike.scala:372)
	at scala.collection.TraversableLike.filterImpl$(TraversableLike.scala:284)
	at scala.collection.AbstractTraversable.filterImpl(Traversable.scala:108)

If I select a shorter time window, e.g. /api/v1/report/activity-report/brackDE?dateFrom=2022-06-01&dateTo=2022-06-15, the request works, but returns

{
    "items": []
}

We're using SMUI version v3.13.1. Are we missing some configuration? Couldn't find anything on reports in the docs.

Thanks for looking into that.

Rule validation (on save) - frontend communication (to search manager)

When saving a rule a server-side validation is triggered. Unfortunately, the results of this validation is only logged (server-side) and never communicated to the user. So, this issue is about:

  • marking invalid rules when (a) loading the rules after selection of an search input or (b) saving edited rules
  • invalid rules should be marked live- / rule-wise
  • saving edited search input with invalid rules should also return an error Toast message (red). update persistence should not be done.

Validation should contain:

  • resulting querqy-rules.txt in total is parseable by querqy
  • invalid undirected synonyms (using * and $n)
  • invalid target URLs for REDIRECT rules
  • empty rule input / parameters (synonym, UP/DOWN term, etc.)
  • etc.

Log userInfo for triggered rules.txt deployment (LIVE/PRELIVE)

WHY

Seeing which user triggered a deployment and when that happened, helps a team of search managers to better understand their activities and the state of the rules published.

WHAT

The DeploymentLog should be extended with a userInfo.

ACs

  • Persistence of log events need to be extended.
  • Report of deployments should also state the user.

To be checked: For GDPR reasons, it might be necessary to pseudonymized or even anonymize the username.

New SMUI feature "Copy input term & rule set"

Recently the idea for a new SMUI feature was popping up: The possibility to COPY all rules for an input term as a set. This would be very helpful while working with different tags/clients and with different languages. Search Managers would be able to copy complex rule sets and then rework them for another client as sometimes they might just need slightly different rules. It could be a button like "Copy input term & rule set" - getting to dropdowns where you can choose tags or language (where to copy/paste the input term to).

It shouldn't possible to save empty filter rules

Hi,

we had the problem, that it is possible to save empty filter rules, which leads to a syntax error, when deploying into solr.
Here is an excerpt of our rules-smt file

DOWN(50): * manufacturer:Wiko
DOWN(50): * manufacturer:ZTE
DOWN(10): * searchText:"Iphone 11"
FILTER: * -searchText:
FILTER: * -searchText:"Mi Smart Plug"
FILTER: * -searchText:"Roboter-Staubsauger"

Broader DBMS support for SMUI (e.g. MySQL<5.7 , MS SQL)

As PR #67 indicates , there is a demand for a broader DBMS support of SMUI. MySQL<5.7 (5.6) and MS SQL are currently discussed.

To make SMUI's database evolution compatible with other DBMSs adjustment to the database model must be made (see https://github.com/querqy/smui/pull/67/files).

In order to stay compatible with previous SMUI installations , there needs to be a way to migrate existing search management data (best case: automatically), see #67 (comment).

Support for Tags/Properties in Rule Import

As a Querqy user having already many rules I would like to migrate to SMUI. Some rules are annotated with various properties which need to be imported as well:

"notebook" =>
SYNONYM: laptop
@{
"property_1" : [ "abcd" ],
"property_2" : [ "10", "20", "30" ]
}@

When importing above rule, I would like to have the properties and their values associated in SMUI.

SMUI admin interface / configure results in an error

  • Navigate to "Admin"
  • Click "configure" to an existing rules collection

Actual:

Error:
2023_bug_report_admin-configure

Expected:

Detail configuration UI for the rules collection.

Mitigation:

With the next build of v3.15, I will make the "Admin" dialog temporarily inaccessible until this is fixed.

Enable search on rule id

Currently, the toggle 'toggle.rule-deployment.log-rule-id' allows to export the rule id in the querqy rule _log property towards Solr.
In Solr, we can see that log entry (with the id) of applied rule in the querqy.infoLogging tag.
However, a SMUI user has no option to look for the rule in SMUI based on the rule id of the querqy infoLogging.
Could we enable the lookup of the rule via the rule id in the SMUI rule filter (similar to the filter on an inputTag)?

create solr_index via REST-endpoint & update documentation (was: The solr_index field primary key "id" is not auto incrementing)

The solr_index field has the primary key id, however it is not auto incrementing. When you follow the instructions in the README, you don't insert an id, which causes SMUI ui to report an error.

Changing

INSERT INTO solr_index (name, description) VALUES ('core_name1', 'Solr Search Index/Core');

to

INSERT INTO solr_index (id, name, description) VALUES (1, 'core_name1', 'Solr Search Index/Core');

fixes it. However, should the ID field be autoincrementing?

RFE: Add meta-data to rules

Dropping the idea here as recently discussed:

In our usage scenario, it would be helpful to provide some additional information per rule, e.g.

  • A "human-readable" comment on what the rule aims to achieve
  • Who (which user) requested or created the rule in SMUI
  • Point in time when the rule was created / modified
    Further meta-data comes to mind, maybe to limit rules lifetime for specific boosts...?

Opening the ticket here as recently discussed... for further discussion.

Negative field names shown in dropdown for UP/DOWN rules

When demonstrating SMUI to a client we noticed that a choice of field names are shown in a dropdown when creating a new UP/DOWN rule. However, they are all shown with a negative pair, which doesn't make sense for UP/DOWN - although it does for FILTER rules.

Single preview or draft rule publishes

Search managers have no easy way to preview the impact of single rules they are currently working on. SMUI only enables the deployment of whole rules.txt files that belong to a rules collection. This is disadvantageous, e.g.:

  • Rule deployments might take too long, resulting in unacceptable wait times for the managers.
  • Rule deployments in the middle of their evolution is risky, because they might impact the end user search experience in an unexpected way (when done on LIVE). Also, rule deployments by one search manager always deploy all rules maintained in the system incl. rules from other managers at the time of deployment.

Note: Rules and spellings will be treated the same in the context of this improvement proposal. Also rules.txt incl. spellings will be used for simplicity.

Deployments to optionally configured PRELIVE instances, might be as time consuming as LIVE deployments. Also, PRELIVE instances do often not come with synchronous data compared to their LIVE equivalent (product data especially).

Goal: Enable publishing single rules in a draft status - robust & fast!

The (querqy) search tech stack:

Assume the following setup:

A (1) search frontend processing the user (URL) query,
and a (2) search engine (like Solr or Elasticsearch, to respond to the query) with a querqy Rewriter-Chain that is connected to the SMUI rules.txt deployment process.

A typical search query might enter the system like this:

https://example.com/search?query=laptop

The corresponding querqy Rewriter-Chain might enhance the user query like this:

common --> hyphen --> replace --> wordbreak

  • common and replace, in this example, receive rules.txt input from SMUI via the described deployment process.
  • hyphen and wordbreak work without SMUI input.
  • Also, the SMUI deployment process might add additional business logic like semantic checks of resulting rules.txt files, regression tests including searches being simulated, or other kinds of plausibility verification.

Single preview or draft rules should not be part of above’s productive Rewriter-Chain for the search end user. On the other hand, their impact shall be previewable in the LIVE context by the search managers who work on these rules.

Acceptance Criteria:

  • Search managers instantly see the impact of rules, they are editing, in the LIVE context.
  • The status of rules (draft vs. LIVE) is transparent to the search managers.
  • Individual search managers might work on different rule drafts at the same time.
  • Entitled search managers might trigger a deployment of rules.txt files at any time, making all finalized draft rules of all search managers accessible to the search end users.
  • To prevent a search manager, A, from accidently publishing an unfinished rule draft of B, the draft status of rules need to be explicitly closed so that they will only then be considered by the deployment process of SMUI.

Side criteria: The final rules.txt deployment, having the final impact on the search end user experience, should still be testable like suggested above (plausibility/regression tests).

Note: There is also the possibility of two search managers concurrently working on the same rule draft.

Introducing drafts to the (querqy) search tech stack:

Challenge / search manager UX hypothesis: While using the preview, search managers want to experience the impact of all rules end users experience, but with the additional flavor of draft rules. This means more specifically:

  • In general: All Rewriters applying to end users, also apply to preview searches for managers.
  • Exception: All search manager specific draft rules apply additionally while the (maybe outdated rule from the perspective of the manager) end user rule is suppressed.

To ensure a clean separation of (single) draft rules vs. the whole set of productive rules.txt files, draft Rewriters are suggested, e.g.:

common_drafts --> common --> hyphen --> replace_drafts --> replace --> wordbreak

This way, integrity of rules.txt file deployments for the search end users can be ensured with every (also time consuming) process necessary, while it technically only needs to be ensured draft Rewriters never apply to requests from end users (vs. requests from search managers). This can also be test automation ensured in the (querqy) search tech stack.

Request flow for the search end user:
--> search frontend: https://example.com/search?query=laptop
--> The common Rewriter applies the following rule:

laptop =>
    SYNONYM: notebook

Request flow for the search manager:
--> search frontend: https://example.com/search?query=laptop&smui.user=paul_bartusch
--> The common_draft Rewriter applies the following rule:

laptop =>
    SYNONYM: notebook
    @{
        "smui.user" : "paul_bartusch"
    }@

The Rewriter containing the draft rules can also be created dynamically.

The smui.user URL parameter can be part of the preview_link as introduced with v3.15.

Security note: Making draft rules accessible via the search frontend by adding a URL parameter incl. the clear text username of the search manager might be easily replicated by an outside party (and also easy to spoof). This is either be accepted or prevented by a more advanced security architecture (e.g. VPN access or other encryption/decryption techniques).

(?) Discussion:

  • Do you see an alternative frontend / (querqy) search engine and Rewriter setup that also fulfills the requirements expressed in this improvement proposal? Some thoughts: The smui.user querqy annotations can also be part of the main common and replace rules.txt input as second versions of the inputs (making dedicated draft Rewriters obsolete). But this way, still the whole rules.txt deployment process incl. time consuming processes eventually are part of draft deployments.
  • Do you see a way to suppress the laptop rules in the common Rewriter when a “laptop” search frontend query is triggered by the manager (instead of the end user)? The way it is suggested here, seems to impose the risk of overlapping rule application (draft vs. LIVE).

(!) Next: Concept evaluation of the search manager experience for (single) draft preview rules in SMUI.

Move docker-compose.yml into a /examples subdir, and add more?

I've written up some docker-compose.yml scripts for both MS SQL Server and MySQL. Should we move our "quickstart" docker-compose.yml into an /examples and then add more examples?

I'm happy to do this if folks think it would be a good enhancement.

Predefined Tags File doesn't work with order of Evolutions

In working on adding some predefined tags to Chorus, querqy/chorus#80, I discovered that because the SearchManagementRepository syncs the tags when the object is instanciated, that happens before the evolutions are run. Which means SMUI errors out before the evolutions can ever be run.

WARNING: All illegal access operations will be denied in a future release

Oops, cannot start the server.

com.google.inject.CreationException: Unable to create injector, see the following errors:


1) Error injecting constructor, java.sql.SQLSyntaxErrorException: Table 'smui.solr_index' doesn't exist

  at models.SearchManagementRepository.<init>(SearchManagementRepository.scala:17)

  at models.SearchManagementRepository.class(SearchManagementRepository.scala:17)

  while locating models.SearchManagementRepository

    for the 3rd parameter of controllers.ApiController.<init>(ApiController.scala:27)

The work around is to first start SMUI without predefined tags, get the evolutions run, then come back and restart with the predefined tags!

Unable to view Solr information when trying to publish

Hello, Thank you for this utility.

I'm trying to set it up in my local and I'm able to add synonyms and can view them in the mysql table. So far so good.

When opening the UI (eg., http://localhost:9000), at the top right corner, where the Solr node has to appear (in order to publish) doesn't appear for me. I'm not sure if I'm missing something fundamental here. Any pointers please?

I did make sure I have the below line in my application.conf file

smui2solr.SOLR_HOST="localhost:8983"
#smui2solr.SOLR_HOST=${?SMUI_2SOLR_SOLR_HOST}

Also when I when load the UI in the browser (http://localhost:9000) I see an "An error occurred" warning and it quickly disappears and nothing seems to be in the log, related to this warning.

image

Thank you,
Aswath

Provide better user feedback while 'Publishing to live'

This is a followup of ticket: #87 (thanks @epugh for making a PR for #87 ) .
Now (that means in SMUI 3.13.1) process is that when someone clicks 'Publish to LIVE' a confirmation popup comes (as it should), when someone then clicks 'YES' then popup stays with buttons unlocked until a 'success confirmation' comes up.
Given that we use a custom script that takes a bit longer to 'Publish to LIVE' (as it includes a git push) having that popup on screen for a good few seconds is a bit confusing for our operators.
What would make sense would be to lock that popup somehow, eg (sorry for my bad graphical skills :) ):
image

Admin Screen to Manage Rules Collections

Today, we have to use a API call to create a Solr Index in SMUI:

SOLR_INDEX_ID=`curl -S -X PUT -H "Content-Type: application/json" -d '{"name":"ecommerce", "description":"Ecommerce Demo"}' http://localhost:9000/api/v1/solr-index | jq -r .returnId`

I am working with a client that, if we are successful, will have many collections. They could use this API call, however it would be nice if SMUI had an admin interface that let you via clicking create and update new "Solr Index". Bonus points on if you could edit the deployment scripts via the web interface ;-)

Writing to /usr/bin/solr/ is prevented by the Dockerfile permissions.

The Docker image runs as the user smui but the /usr/bin/ hierarchy is owned by root.

I did this to work around this:

FROM querqy/smui:3.6.1

# This is a temporary shim to allow us to write to /usr/bin/solr/preliveCore/conf
USER root
RUN chmod -R 0777 /usr

It feels bad taht we are writing out a data file to /usr/bin/ anyway!

[minor] Market standard version number not retrieved correctly from dockerhub

SMUI only retrieved the major and minor version number of the dockerhub market standard correctly. The patch number stays 0.
Probably, this is happened when changing the tagging policy of containers on dockerhub (having individual tags for major, minor and patch number).

smui/app/models/config/SmuiVersion.scala :: latestVersionFromDockerHub() needs to be fixed.

Deletion of rule collection without rules, but existing event history

A rule collection can be deleted (admin screen), if no rules (inputs) are maintained for it.
Anyway, if that collection has a history of (deleted) events assigned to it, those events will not get deleted, and stay in the database.

There are different options to deal with this:

  1. Do not allow the deletion of a rule collections, if history events are associated with it.
  2. Reconfirm deletion of a rule collection, if history events are associated with it, e.g. "There exist a history for the rule collection. Do you really want to delete it? [Yes] [No]"
  3. Just delete the history without further communication.

I am curious for your thoughts on this.

Admin Screen to manage Suggested Solr fields

I don't yet have practical experience on how much we'll use the suggested Solre fields feature. However, if we do start using them, it would be nice to be able to have an admin interface to pick them. Over in Quepid land, we actually query the underlying search engine (Solr, Elasticsearch) to get a list of fields, and then have a filtering picker to let the user pick the one.

Otherwise we are doing:

curl -S -X PUT -H "Content-Type: application/json" -d '{"name":"product_type"}' http://localhost:9000/api/v1/${SOLR_INDEX_ID}/suggested-solr-field

OAuth2 Authentication for Elastic Search (Help Wanted)

Hi, For a POC we are trying to connect SMUI to ElasticSearch. And are looking for any material or guidance how we can connect to ElasticSearch from Quepid using OAuth2 client id and secret with Azure being the host. Please let me know if more details are required .

SMUI major update v4: New configuration and defaults

  1. Set smui.target-environment.config (currently on the preview_link branch) to:
"""{
  "LIVE": {
    "en": [
      {
          "rulesCollection": "AmazonEN",
          "tenantTag": null,
          "previewUrlTemplate": "https://www.amazon.com/s?k=$QUERY"
      }
    ]
  }
}"""

This way:

  • SMUI quickstart showcases the preview link functionality.
  • SMUI production setups (e.g. querqy/chorus or custom installations) are able to explicitly define the target environment.

Support for Elasticsearch

Hello Contributors

I wanted to ask about your opinion about the following options for supporting Elasticsearch:

  1. Extend this project to support ES
  2. Make a fork of this project for ES
  3. Make a completely separate project (possibly with a different stack)

What would make the most sense in terms of maintainability and effort needed?

Show qualified backend error message on SMUI frontend (for BadRequest/400)

Follow-up on #52

In case the backend API delivers a BadRequest/400 an "unexpected" error is reported to the user of SMUI.

Example: Create empty spelling / rule input.

In those cases the errors, like validation errors, should be expected by SMUI's frontend and reported including the specific error message delivered by the backend.

[MINOR] Rules can be created without a deployment channel being configured

Steps to reproduce:

  • Start SMUI on a fresh database
  • Create Rules

Actual:

  • Rules can be created (but the assignment to a deployment channel is unclear, also they disappear once a deployment channel is configured properly - which is unexpected to the user).

Expected:

  • Deliver a warning to the user.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.