Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove unused simple query string features #3360

Merged
merged 9 commits into from
Dec 1, 2023
Merged

Conversation

obulat
Copy link
Contributor

@obulat obulat commented Nov 15, 2023

Fixes

Fixes #3327 by @sarayourfriend

Description

This PR removes the following feature from the simple query string:

  • Fuzzy
  • Near (Slop)
  • Prefix
  • Escape

The following features are left in:

  • And
  • Not
  • Phrase
  • Whitespace

For more reasoning on why each feature is removed or left in, see the linked issue.

The search guide page removed mentions of the features that were removed. The text was also simplified to make it clearer now that there are only 2 features left. The + feature wasn't removed from simple search query in the API, however, since the behavior of "cat dog" is the same as "cat+dog", I removed it from the search syntax description page to prevent confusion.

Testing Instructions

Run the app. The features that were turned off should not affect the search results (() precedence, ~ fuzziness,), but the " quotes for the exact match, - for exclusion, + for and should work as they did before.
The frontend /search-help page text should be clear and describe the search query syntax.

Also, look through the query features that were left in/removed, and see if you agree with it.

Checklist

  • My pull request has a descriptive title (not a vague title likeUpdate index.md).
  • My pull request targets the default branch of the repository (main) or a parent feature branch.
  • My commit messages follow best practices.
  • My code follows the established code style of the repository.
  • I added or updated tests for the changes I made (if applicable).
  • I added or updated documentation (if applicable).
  • I tried running the project locally and verified that there are no visible errors.
  • I ran the DAG documentation generator (if applicable).

Developer Certificate of Origin

Developer Certificate of Origin
Developer Certificate of Origin
Version 1.1

Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.


Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.

@obulat obulat requested review from a team as code owners November 15, 2023 11:05
@obulat obulat self-assigned this Nov 15, 2023
@github-actions github-actions bot added 🧱 stack: api Related to the Django API 🧱 stack: frontend Related to the Nuxt frontend labels Nov 15, 2023
@obulat obulat force-pushed the remove-unused-sqs-features branch from 8230586 to e7fb1a3 Compare November 15, 2023 11:06
@openverse-bot openverse-bot added 🟧 priority: high Stalls work on the project or its dependents 🕹 aspect: interface Concerns end-users' experience with the software 🧰 goal: internal improvement Improvement that benefits maintainers, not users labels Nov 15, 2023
Copy link

github-actions bot commented Nov 15, 2023

Size Change: -1.29 kB (0%)

Total Size: 1.01 MB

Filename Size Change
./frontend/.nuxt/dist/client/app.js 132 kB -44 B (0%)
./frontend/.nuxt/dist/client/app.modern.js 123 kB -42 B (0%)
./frontend/.nuxt/dist/client/components/v-sources-table.js 15.2 kB -61 B (0%)
./frontend/.nuxt/dist/client/components/v-sources-table.modern.js 15.2 kB -61 B (0%)
./frontend/.nuxt/dist/client/pages/search-help.js 1.08 kB -558 B (-34%) 🎉
./frontend/.nuxt/dist/client/pages/search-help.modern.js 1.08 kB -540 B (-33%) 🎉
ℹ️ View Unchanged
Filename Size Change
./frontend/.nuxt/dist/client/247.js 343 B 0 B
./frontend/.nuxt/dist/client/247.modern.js 346 B 0 B
./frontend/.nuxt/dist/client/248.js 1.85 kB 0 B
./frontend/.nuxt/dist/client/commons/app.js 105 kB 0 B
./frontend/.nuxt/dist/client/commons/app.modern.js 87.5 kB 0 B
./frontend/.nuxt/dist/client/commons/components/v-error-section/components/v-external-search-form/components/v-external-source-li/4e2d09e1.js 5.18 kB 0 B
./frontend/.nuxt/dist/client/commons/components/v-error-section/components/v-external-search-form/components/v-external-source-li/4e2d09e1.modern.js 5.62 kB 0 B
./frontend/.nuxt/dist/client/components/loading-icon.js 731 B 0 B
./frontend/.nuxt/dist/client/components/loading-icon.modern.js 734 B 0 B
./frontend/.nuxt/dist/client/components/table-sort-icon.js 514 B 0 B
./frontend/.nuxt/dist/client/components/table-sort-icon.modern.js 518 B 0 B
./frontend/.nuxt/dist/client/components/v-all-results-grid.js 6.85 kB 0 B
./frontend/.nuxt/dist/client/components/v-all-results-grid.modern.js 6.68 kB +1 B (0%)
./frontend/.nuxt/dist/client/components/v-audio-collection.js 4.5 kB +3 B (0%)
./frontend/.nuxt/dist/client/components/v-audio-collection.modern.js 4.38 kB +3 B (0%)
./frontend/.nuxt/dist/client/components/v-audio-list.js 1.43 kB 0 B
./frontend/.nuxt/dist/client/components/v-audio-list.modern.js 1.41 kB 0 B
./frontend/.nuxt/dist/client/components/v-audio-result.js 1.12 kB 0 B
./frontend/.nuxt/dist/client/components/v-audio-result.modern.js 1.1 kB 0 B
./frontend/.nuxt/dist/client/components/v-audio-track-skeleton.js 957 B 0 B
./frontend/.nuxt/dist/client/components/v-audio-track-skeleton.modern.js 960 B 0 B
./frontend/.nuxt/dist/client/components/v-audio-track.js 5.15 kB 0 B
./frontend/.nuxt/dist/client/components/v-audio-track.modern.js 5.1 kB 0 B
./frontend/.nuxt/dist/client/components/v-back-to-search-results-link.js 632 B 0 B
./frontend/.nuxt/dist/client/components/v-back-to-search-results-link.modern.js 639 B 0 B
./frontend/.nuxt/dist/client/components/v-bone.js 632 B 0 B
./frontend/.nuxt/dist/client/components/v-bone.modern.js 636 B 0 B
./frontend/.nuxt/dist/client/components/v-box-layout.js 1.16 kB 0 B
./frontend/.nuxt/dist/client/components/v-box-layout.modern.js 1.16 kB 0 B
./frontend/.nuxt/dist/client/components/v-by-line.js 2.34 kB 0 B
./frontend/.nuxt/dist/client/components/v-by-line.modern.js 2.32 kB 0 B
./frontend/.nuxt/dist/client/components/v-collection-header.js 1.49 kB 0 B
./frontend/.nuxt/dist/client/components/v-collection-header.modern.js 1.5 kB 0 B
./frontend/.nuxt/dist/client/components/v-content-link.js 1.06 kB 0 B
./frontend/.nuxt/dist/client/components/v-content-link.modern.js 1.06 kB 0 B
./frontend/.nuxt/dist/client/components/v-content-page.js 531 B 0 B
./frontend/.nuxt/dist/client/components/v-content-page.modern.js 536 B 0 B
./frontend/.nuxt/dist/client/components/v-content-report-button.js 493 B 0 B
./frontend/.nuxt/dist/client/components/v-content-report-button.modern.js 497 B 0 B
./frontend/.nuxt/dist/client/components/v-content-report-form.js 3.35 kB 0 B
./frontend/.nuxt/dist/client/components/v-content-report-form.modern.js 3.23 kB 0 B
./frontend/.nuxt/dist/client/components/v-content-report-popover.js 3.82 kB 0 B
./frontend/.nuxt/dist/client/components/v-content-report-popover.modern.js 3.69 kB 0 B
./frontend/.nuxt/dist/client/components/v-copy-button.js 3.8 kB 0 B
./frontend/.nuxt/dist/client/components/v-copy-button.modern.js 3.81 kB 0 B
./frontend/.nuxt/dist/client/components/v-copy-license.js 2.34 kB 0 B
./frontend/.nuxt/dist/client/components/v-copy-license.modern.js 2.31 kB 0 B
./frontend/.nuxt/dist/client/components/v-copy-license/components/v-license-tab-panel/components/v-media-reuse/pages/image/_id/index.js 3.8 kB 0 B
./frontend/.nuxt/dist/client/components/v-copy-license/components/v-license-tab-panel/components/v-media-reuse/pages/image/_id/index.modern.js 3.81 kB 0 B
./frontend/.nuxt/dist/client/components/v-dmca-notice.js 795 B 0 B
./frontend/.nuxt/dist/client/components/v-dmca-notice.modern.js 801 B 0 B
./frontend/.nuxt/dist/client/components/v-error-image.js 2.51 kB 0 B
./frontend/.nuxt/dist/client/components/v-error-image.modern.js 2.47 kB 0 B
./frontend/.nuxt/dist/client/components/v-error-section.js 5.22 kB 0 B
./frontend/.nuxt/dist/client/components/v-error-section.modern.js 4.58 kB 0 B
./frontend/.nuxt/dist/client/components/v-external-search-form.js 4.1 kB 0 B
./frontend/.nuxt/dist/client/components/v-external-search-form.modern.js 3.44 kB 0 B
./frontend/.nuxt/dist/client/components/v-external-source-list.js 2.63 kB 0 B
./frontend/.nuxt/dist/client/components/v-external-source-list.modern.js 1.99 kB 0 B
./frontend/.nuxt/dist/client/components/v-full-layout.js 3.76 kB 0 B
./frontend/.nuxt/dist/client/components/v-full-layout.modern.js 3.74 kB 0 B
./frontend/.nuxt/dist/client/components/v-get-media-button.js 623 B 0 B
./frontend/.nuxt/dist/client/components/v-get-media-button.modern.js 628 B 0 B
./frontend/.nuxt/dist/client/components/v-grid-skeleton.js 1.55 kB +3 B (0%)
./frontend/.nuxt/dist/client/components/v-grid-skeleton.modern.js 1.55 kB +3 B (0%)
./frontend/.nuxt/dist/client/components/v-hide-button.js 594 B 0 B
./frontend/.nuxt/dist/client/components/v-hide-button.modern.js 592 B 0 B
./frontend/.nuxt/dist/client/components/v-home-gallery.js 4.28 kB 0 B
./frontend/.nuxt/dist/client/components/v-home-gallery.modern.js 4.26 kB 0 B
./frontend/.nuxt/dist/client/components/v-homepage-content.js 1.82 kB 0 B
./frontend/.nuxt/dist/client/components/v-homepage-content.modern.js 1.79 kB 0 B
./frontend/.nuxt/dist/client/components/v-image-cell.js 2.24 kB 0 B
./frontend/.nuxt/dist/client/components/v-image-cell.modern.js 2.23 kB 0 B
./frontend/.nuxt/dist/client/components/v-image-grid.js 4.53 kB +2 B (0%)
./frontend/.nuxt/dist/client/components/v-image-grid.modern.js 4.41 kB +1 B (0%)
./frontend/.nuxt/dist/client/components/v-license-tab-panel.js 641 B 0 B
./frontend/.nuxt/dist/client/components/v-license-tab-panel.modern.js 648 B 0 B
./frontend/.nuxt/dist/client/components/v-load-more.js 1.18 kB 0 B
./frontend/.nuxt/dist/client/components/v-load-more.modern.js 1.07 kB 0 B
./frontend/.nuxt/dist/client/components/v-media-details.js 5.88 kB 0 B
./frontend/.nuxt/dist/client/components/v-media-details.modern.js 5.73 kB 0 B
./frontend/.nuxt/dist/client/components/v-media-info.js 2.56 kB 0 B
./frontend/.nuxt/dist/client/components/v-media-info.modern.js 2.54 kB 0 B
./frontend/.nuxt/dist/client/components/v-media-license.js 931 B 0 B
./frontend/.nuxt/dist/client/components/v-media-license.modern.js 938 B 0 B
./frontend/.nuxt/dist/client/components/v-media-reuse.js 3 kB 0 B
./frontend/.nuxt/dist/client/components/v-media-reuse.modern.js 2.97 kB 0 B
./frontend/.nuxt/dist/client/components/v-media-tag.js 416 B 0 B
./frontend/.nuxt/dist/client/components/v-media-tag.modern.js 420 B 0 B
./frontend/.nuxt/dist/client/components/v-media-tags.js 885 B 0 B
./frontend/.nuxt/dist/client/components/v-media-tags.modern.js 883 B 0 B
./frontend/.nuxt/dist/client/components/v-metadata-value.js 604 B 0 B
./frontend/.nuxt/dist/client/components/v-metadata-value.modern.js 609 B 0 B
./frontend/.nuxt/dist/client/components/v-metadata.js 1.32 kB 0 B
./frontend/.nuxt/dist/client/components/v-metadata.modern.js 1.32 kB 0 B
./frontend/.nuxt/dist/client/components/v-modal.js 982 B 0 B
./frontend/.nuxt/dist/client/components/v-modal.modern.js 973 B 0 B
./frontend/.nuxt/dist/client/components/v-no-results.js 2.67 kB 0 B
./frontend/.nuxt/dist/client/components/v-no-results.modern.js 2.03 kB 0 B
./frontend/.nuxt/dist/client/components/v-old-icon-button.js 853 B 0 B
./frontend/.nuxt/dist/client/components/v-old-icon-button.modern.js 846 B 0 B
./frontend/.nuxt/dist/client/components/v-radio.js 1.02 kB 0 B
./frontend/.nuxt/dist/client/components/v-radio.modern.js 1.02 kB 0 B
./frontend/.nuxt/dist/client/components/v-related-audio.js 824 B 0 B
./frontend/.nuxt/dist/client/components/v-related-audio.modern.js 745 B 0 B
./frontend/.nuxt/dist/client/components/v-related-audio/pages/search/audio.js 4.5 kB +3 B (0%)
./frontend/.nuxt/dist/client/components/v-related-audio/pages/search/audio.modern.js 4.37 kB +2 B (0%)
./frontend/.nuxt/dist/client/components/v-related-images.js 802 B 0 B
./frontend/.nuxt/dist/client/components/v-related-images.modern.js 718 B 0 B
./frontend/.nuxt/dist/client/components/v-report-desc-form.js 996 B 0 B
./frontend/.nuxt/dist/client/components/v-report-desc-form.modern.js 999 B 0 B
./frontend/.nuxt/dist/client/components/v-row-layout.js 2.05 kB 0 B
./frontend/.nuxt/dist/client/components/v-row-layout.modern.js 2.05 kB 0 B
./frontend/.nuxt/dist/client/components/v-safety-wall.js 1.45 kB 0 B
./frontend/.nuxt/dist/client/components/v-safety-wall.modern.js 1.46 kB 0 B
./frontend/.nuxt/dist/client/components/v-scroll-button.js 891 B 0 B
./frontend/.nuxt/dist/client/components/v-scroll-button.modern.js 891 B 0 B
./frontend/.nuxt/dist/client/components/v-scroller.js 596 B 0 B
./frontend/.nuxt/dist/client/components/v-scroller.modern.js 592 B 0 B
./frontend/.nuxt/dist/client/components/v-search-results-title.js 616 B 0 B
./frontend/.nuxt/dist/client/components/v-search-results-title.modern.js 621 B 0 B
./frontend/.nuxt/dist/client/components/v-single-result-controls.js 1.18 kB 0 B
./frontend/.nuxt/dist/client/components/v-single-result-controls.modern.js 1.18 kB 0 B
./frontend/.nuxt/dist/client/components/v-sketch-fab-viewer.js 1.02 kB 0 B
./frontend/.nuxt/dist/client/components/v-sketch-fab-viewer.modern.js 916 B 0 B
./frontend/.nuxt/dist/client/components/v-snackbar.js 1.06 kB 0 B
./frontend/.nuxt/dist/client/components/v-snackbar.modern.js 1.07 kB 0 B
./frontend/.nuxt/dist/client/components/v-source-creator-button.js 547 B 0 B
./frontend/.nuxt/dist/client/components/v-source-creator-button.modern.js 550 B 0 B
./frontend/.nuxt/dist/client/components/v-tag.js 411 B 0 B
./frontend/.nuxt/dist/client/components/v-tag.modern.js 416 B 0 B
./frontend/.nuxt/dist/client/components/v-warning-suppressor.js 307 B 0 B
./frontend/.nuxt/dist/client/components/v-warning-suppressor.modern.js 311 B 0 B
./frontend/.nuxt/dist/client/pages/about.js 1.42 kB 0 B
./frontend/.nuxt/dist/client/pages/about.modern.js 1.42 kB 0 B
./frontend/.nuxt/dist/client/pages/audio/_id/index.js 21 kB -1 B (0%)
./frontend/.nuxt/dist/client/pages/audio/_id/index.modern.js 19.7 kB -1 B (0%)
./frontend/.nuxt/dist/client/pages/feedback.js 1.36 kB 0 B
./frontend/.nuxt/dist/client/pages/feedback.modern.js 1.36 kB 0 B
./frontend/.nuxt/dist/client/pages/image/_id/index.js 18.1 kB 0 B
./frontend/.nuxt/dist/client/pages/image/_id/index.modern.js 16.7 kB 0 B
./frontend/.nuxt/dist/client/pages/image/_id/report.js 5 kB 0 B
./frontend/.nuxt/dist/client/pages/image/_id/report.modern.js 4.75 kB 0 B
./frontend/.nuxt/dist/client/pages/index.js 6.41 kB 0 B
./frontend/.nuxt/dist/client/pages/index.modern.js 6.35 kB 0 B
./frontend/.nuxt/dist/client/pages/preferences.js 1.46 kB 0 B
./frontend/.nuxt/dist/client/pages/preferences.modern.js 1.46 kB 0 B
./frontend/.nuxt/dist/client/pages/privacy.js 1.26 kB 0 B
./frontend/.nuxt/dist/client/pages/privacy.modern.js 1.26 kB 0 B
./frontend/.nuxt/dist/client/pages/search.js 5.82 kB 0 B
./frontend/.nuxt/dist/client/pages/search.modern.js 8.13 kB 0 B
./frontend/.nuxt/dist/client/pages/search/audio.js 499 B 0 B
./frontend/.nuxt/dist/client/pages/search/audio.modern.js 501 B 0 B
./frontend/.nuxt/dist/client/pages/search/image.js 452 B 0 B
./frontend/.nuxt/dist/client/pages/search/image.modern.js 454 B 0 B
./frontend/.nuxt/dist/client/pages/search/index.js 316 B 0 B
./frontend/.nuxt/dist/client/pages/search/index.modern.js 320 B 0 B
./frontend/.nuxt/dist/client/pages/search/model-3d.js 242 B 0 B
./frontend/.nuxt/dist/client/pages/search/model-3d.modern.js 246 B 0 B
./frontend/.nuxt/dist/client/pages/search/video.js 240 B 0 B
./frontend/.nuxt/dist/client/pages/search/video.modern.js 243 B 0 B
./frontend/.nuxt/dist/client/pages/sensitive-content.js 1.52 kB 0 B
./frontend/.nuxt/dist/client/pages/sensitive-content.modern.js 1.53 kB 0 B
./frontend/.nuxt/dist/client/pages/sources.js 1.53 kB 0 B
./frontend/.nuxt/dist/client/pages/sources.modern.js 1.54 kB 0 B
./frontend/.nuxt/dist/client/runtime.js 2.87 kB 0 B
./frontend/.nuxt/dist/client/runtime.modern.js 2.87 kB 0 B
./frontend/.nuxt/dist/client/vendors/app.js 69 kB 0 B
./frontend/.nuxt/dist/client/vendors/app.modern.js 68.5 kB 0 B

compressed-size-action

@AetherUnbound
Copy link
Collaborator

I'm hesitant to ask this because I know it's a significant amount of work, but this change (even though so few people use it!) does seem non-trivial for how our search functions. Do you feel it might be appropriate to have this change be under a different API version (e.g. /v2/). I guess we're not changing the shape of the API per-se, but rather how our search functions behind the scenes? Interested to hear @WordPress/openverse-maintainers's thoughts on that.

Copy link
Collaborator

@sarayourfriend sarayourfriend left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome. I'm so excited to see if this improves anything on our search timings 👀

@sarayourfriend
Copy link
Collaborator

I'm hesitant to ask this because I know it's a significant amount of work, but this change (even though so few people use it!) does seem non-trivial for how our search functions. Do you feel it might be appropriate to have this change be under a different API version (e.g. /v2/). I guess we're not changing the shape of the API per-se, but rather how our search functions behind the scenes? Interested to hear @WordPress/openverse-maintainers's thoughts on that.

Based on Olga's analysis of the request logs and what is actually used, it really seems like the features she's suggested to turn off are just not actually used, or used so rarely that we wouldn't be breaking a feature that people actually rely on.

Also: API versioning is a massive undertaking that we should do a significant amount of planning for (#662) and for that to block what is hypothetically a significant improvement to query performance (one that API consumers would not automatically benefit from, and therefore one that we wouldn't see the most benefit from in our infrastructure and response times) would be devastating to me. From my perspective, balancing the relatively small (statistically zero) actual uses of these features against the known benefits to performance, and then again against the known complexity and time investment that versioning would take (and additionally the known issue that we wouldn't see the beneficial change across the board, only in requests that change to v2), makes me think there's no reasonable way to argue for us to version this change. The benefits of versioning negate the immediate benefit of rolling out this change.

If we hear that someone is actually using and relying on this feature, then we can selectively turn them on when a query includes key characters (*, |, ~, etc), and keep them off for the the rest. We can even do that now if it would assuage concerns about rolling this out non-versioned. However, I keep coming back to Olga's excellent analysis which for me completely satisfactorily shows that these features are not used in a meaningful way.

@AetherUnbound
Copy link
Collaborator

Thanks for your thoughts Sara 🙂 I agree, my impression was to move forward regardless but I wanted to check with folks to make sure that sense was shared. And we can move forward with confidence thanks to the great analysis Olga did, too!

@obulat
Copy link
Contributor Author

obulat commented Nov 17, 2023

If we hear that someone is actually using and relying on this feature, then we can selectively turn them on when a query includes key characters (*, |, ~, etc), and keep them off for the the rest. We can even do that now if it would assuage concerns about rolling this out non-versioned. However, I keep coming back to Olga's excellent analysis which for me completely satisfactorily shows that these features are not used in a meaningful way.

Do you think it would be helpful to add this and add logging for when the query has a key character so that we can analyze how much they are used? Now that the frontend page does not have these links, we will probably get more accurate usage numbers.

@openverse-bot
Copy link
Collaborator

Based on the high urgency of this PR, the following reviewers are being gently reminded to review this PR:

@AetherUnbound
@dhruvkb
This reminder is being automatically generated due to the urgency configuration.

Excluding weekend1 days, this PR was ready for review 2 day(s) ago. PRs labelled with high urgency are expected to be reviewed within 2 weekday(s)2.

@obulat, if this PR is not ready for a review, please draft it to prevent reviewers from getting further unnecessary pings.

Footnotes

  1. Specifically, Saturday and Sunday.

  2. For the purpose of these reminders we treat Monday - Friday as weekdays. Please note that the operation that generates these reminders runs at midnight UTC on Monday - Friday. This means that depending on your timezone, you may be pinged outside of the expected range.

Copy link
Member

@dhruvkb dhruvkb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Approving to unblock, although breaking compatibility is not very appealing. It we can conditionally enable those features when the strings have the special characters, that would be ideal.

@sarayourfriend
Copy link
Collaborator

sarayourfriend commented Nov 20, 2023

It we can conditionally enable those features when the strings have the special characters, that would be ideal.

I asked one of the Elasticsearch expert folks we've been talking to about the response time issues whether this would make a difference. My thinking being, I'd be surprised if ES doesn't itself already do something like a "*" in query check before doing anything with the prefix feature. It would be weird if even without * in the query it still had to spend time working on prefix related queries.

In other words, if these features aren't used very heavily, then maybe they aren't causing any performance difference.

On the other hand, if they are enabled, even if conditionally (whether by us or by relying on ES to correctly ignore features that aren't in the query syntax), then it leaves open the possibility for someone to cause our service overwhelming load by sending heaps of these kinds of requests with complex features. From a service resilience standpoint, it's worth turning these features off entirely because they break compatibility. From that perspective, ideally we turn them off soon, before there is any large scale reliance on them.

I'll update here once I've heard from our ES expert colleague. For now my sense is that either merging this PR as is (turn features off entirely) or not doing it at all are the two options that will make sense. That's unless our colleague lets us know that there is in fact somehow a difference between a feature being off and a feature being not used in a query but still technically available. If that is the case, then the conditional checks in our code ("*" in query, and so on) would start to make sense. Otherwise, they'd just add complexity that something like #3328 would be a better approach for.

@sarayourfriend
Copy link
Collaborator

Do you think it would be helpful to add this and add logging for when the query has a key character so that we can analyze how much they are used? Now that the frontend page does not have these links, we will probably get more accurate usage numbers.

This sounds like a good option too, @obulat. If you're comfortable with this PR drafting and us getting that analysis information for a few weeks, it would be good information to help us make an accurate decision.

@obulat obulat marked this pull request as draft November 20, 2023 07:24
@obulat obulat force-pushed the remove-unused-sqs-features branch from 1d60c9d to c6f9a28 Compare November 27, 2023 04:46
Signed-off-by: Olga Bulat <[email protected]>

# Conflicts:
#	api/test/unit/controllers/test_search_controller_search_query.py
# Conflicts:
#	api/test/unit/controllers/test_search_controller_search_query.py
@obulat obulat marked this pull request as ready for review November 29, 2023 13:24
@obulat
Copy link
Contributor Author

obulat commented Nov 29, 2023

I've added the logging for query strings that contain one of the 4 symbols, but kept the flags off. This is why I requested a re-review, @dhruvkb, @sarayourfriend.

]
for flag, pattern in flags:
if bool(re.search(pattern, query)):
log.info(f"Special feature in `{query_name}` query string. {flag}: {query}")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a suggestion, but it would produce less logs overall while making it easier to tally them if the logging did something like, counting the instances of each flag and logging all flags at once in JSON like { "log_message": "Special features present in query", "query_name": query_name, "query": query} | {flag: count_flag(flag, query) for flag in flags } (one-liner just for commenting, not to suggest that's the way to do it).

No big deal, though. This way works too, it just produces slightly more logs (not many, because we know these are used so rarely and mostly following the frontend examples) and requires parsing the message string rather than using Logs Insights discovered fields feature.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for this suggestion, I was actually not certain that the logging pattern would be good, and I didn't even realize that there could be several flags used in a single search. I'll update the logging

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the logging, now if you go to http://0.0.0.0:50280/v1/images/?q=cat+net*+(dog)+%5C(+someth~2, you get the following message logged:
[2023-11-30 08:32:53,795 - root - 362][INFO] [3419191a256b4058b2e8ffd5066b1ec2] {'log_message': 'Special features present in query', 'query_name': 'q', 'query': 'cat net* (dog) \\( someth~2', 'flags': ['PRECEDENCE', 'ESCAPE', 'FUZZY|SLOP', 'PREFIX']}

I don't think we need to log the flag cound separately, do you, @sarayourfriend ?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess the raw count isn't that important, is it! Good call 👍 The change LGTM.

Signed-off-by: Olga Bulat <[email protected]>
@obulat obulat merged commit b35ce3f into main Dec 1, 2023
46 checks passed
@obulat obulat deleted the remove-unused-sqs-features branch December 1, 2023 11:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🕹 aspect: interface Concerns end-users' experience with the software 🧰 goal: internal improvement Improvement that benefits maintainers, not users 🟧 priority: high Stalls work on the project or its dependents 🧱 stack: api Related to the Django API 🧱 stack: frontend Related to the Nuxt frontend
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

Disable unused simple query string features
5 participants