guide
  • Introduction
  • Guiding Principles
    • Mission Statement
    • Conflict Resolution Process
  • Operating Model
    • Working Together
    • Holacracy
      • Meetings
      • Specific Roles
      • Terms and Definitions
      • Finer Points
      • Holacracy-Asana Key
    • Getting Things Done
      • Daily, Weekly, Monthly, and Annual Reviews
      • GTD-Asana Key
    • Transparency
    • Language
    • Budgeting
    • By Department
      • Engineering Operations
  • General Guidelines
  • Employment Policies
    • Equal Opportunity Employment
    • At-Will Employment
    • Code of Conduct in the Community
    • Complaint Policy
    • Drug and Alcohol Policy
    • Vacation, Holiday, and Paid Time Off (PTO) Policy
    • Supplemental Policies for Remote Employees and Contractors
    • Supplemental Policy for Bonus, Commissions, and other Performance-based Payments
    • Supplemental Policies for Hourly International Contractors or Workers
    • Supplemental Policies for Hourly International Contractors or Workers
    • Disputes and Arbitration
  • Benefits and Perks
    • Health Care
    • Vacation, Holiday and Paid Time Off (PTO) Policy
    • Holiday List
  • Hiring Documents
    • Acknowledgement of Receipt
    • Partner Proprietary Information and Inventions Agreement
  • Engineering Wiki
    • Code Snippets
      • Front End Code Snippets
    • Setup
      • 1: Overview of development using Audienti
      • 2: How to setup your dev environment on Docker
      • 2a: Setting up on our cloud your dev server
      • 3: Connect to Production using the VPN
      • 4: Import data into your development environment
    • Deployment
      • Docker based deployment of back end (manual)
    • Culture
      • How our development team works
      • Code Best Practices
    • Tips
      • Setting up a new development machine
      • Importing data to Development environment
      • GIT workflow and work tracking
      • Using Slack
      • Using Rubocop
      • Our Code Standards
      • General suggested best practices
      • Tracking your time
      • Naming Iterations
    • Migrations
      • Postgres
      • ElasticSearch
      • Redis
    • Database and System Maintenance
      • Redis Howtos
      • Elasticsearch HowTos
      • Postgres HowTos
      • Administration recipes
      • App maintenance crash course notes
    • Front End
      • 2016 Plan
      • Deploy
      • Assets
      • SearchLogic
      • How to create UI components
      • OMA Standard Tables
    • Monitoring and Alerting
      • Monitoring Systems
      • Monitoring individual controller actions
      • Get notified when a metric reaches a certain threshold
      • Instrumenting your models using Oma Stats
      • Configuring Graphite Charts
      • Tracking your results with StatsD
      • Logging Fields
      • Updating Kibana Filtering
    • Testing
      • Coverage
      • Elasticsearch mapping config synchronization
      • Testing Gotchas
      • Rspec Preloader
      • Test Best Practices
    • Models
      • Backlinks
    • Queueing and Worker System
      • Queueing and Job Overview
    • Processors
      • Rebuilding Spot Instances
      • Deploying processors
      • Running processors in development
      • Reverting to the previous build on a failed deployment
    • Processors / Opportunity Pipeline
      • Opportunity Pipeline
      • Diagram
    • Processors / Enrichment Pipeline
      • Diagram
      • Clustering
    • Processors / Backlink Pipeline
      • Diagram
      • Backlink Pipeline external APIs
      • Backlink pipeline logic
    • Processors / Automation Pipeline
      • Diagram
      • Automation Pipeline Overview
      • Agents
      • Running in development
    • Messaging and Social Accounts
      • Overview
    • API
      • Audienti API
    • Algorithms
    • Troubleshooting
      • Elasticsearch
    • Big Data Pipeline Stuff
      • Spark
    • Our Product
      • Feature synopsis of our product
    • Research
      • Backend framework comparison
      • Internet marketing Saas companies
    • Code snippets
      • Commonly Used
      • Not Used
    • Miscellaneous
      • Proxies and Bax
    • Legacy & Deprecated
      • Search criteria component
      • Classes list
      • Target Timeline
      • Twitter processor
      • Asset compilation
      • Test related information
      • Interface to EMR Hadoop jobs
      • Mongo Dex Indexes to be Built
      • Mongodb errors
      • Opportunity pipeline scoring
      • Graph Page
      • Lead scoring
      • Insights
      • Shard keys
      • Setting up OMA on local
      • Clone project to local machine
      • Getting around our servers in AWS
  • Acknowledgements
  • Documents That Receiving Your First Payment Triggers Acknowledgement and Acceptanace
Powered by GitBook
On this page
  • Mockups
  • Criteria JSON example
  • Implementation pieces
  • Implementation approaches
  • TBD
  1. Engineering Wiki
  2. Legacy & Deprecated

Search criteria component

PreviousLegacy & DeprecatedNextClasses list

Last updated 7 years ago

(by pavel, last update: sep 2013)

Main goal is to provide "rich" search functionality.

Mockups

A row

Criteria JSON example

var criteria =
  {
    'type': 'and',
    'children': [
      {
        'type': 'not',
        'children': [
          {
            'type': 'tags',
            'operator': 'include',
            'operands': ['toy', 'walthers']
          }
        ]
      },
      {
        'type': 'response_code',
        'operator': 'is_equal_to',
        'operands': [200]
      }
    ]
  }

Implementation pieces

  • A criteria graph (in particular a list of individual criteria) to express selected search criteria

  • UI component to represent criteria

    • show an empty criteria list

    • add a new criteria row

    • save a named list

    • show already stored (in previous sessions) lists

    • "polymorphic" criteria row: an ability to show different criteria types and change inputs base on previous selections dynamically. For example if a user selects "response code" criteria, a row will change the next drop-down to show response code specific options.

  • "Criteria to ES" mapper to translate criteria list. If JSON representation of criteria will mimic ElasticSearch, the item will be get for free. The other mappers (at least "criteria to mongo") should also be considered.

Implementation approaches

Plain old ruby objects

  • Criteria list is implemented using plain "conventional" ruby.

  • Requires additional coding to implement serialization/deserialization

  • Requires additional coding to store saved criteria in a database

  • Requires additional coding for validation

  • More flexible and allow for example move from a list to a tree of criteria if it is needed

  • Polymorphic criteria is implemented using ruby inheritance and composition

ActivieRecord

  • Saved search as one-to-many association (search to criterion items)

  • Locked on the list representation of the saved search. Moving to "trees" is harder

  • "Save" functionality for free.

  • "Validation" for free

  • Polymorphic criteria is implemented using ActiveRecord STI

  • "Include/Exlude" functionality is implemented as a boolean flag on Criteria class

Purely JavaScript implementation

Intentionally left blank :)

TBD

How the criteria component coordinates with the "search" input? In particular, if both components (criteria rows and input) are filled, should we use AND or OR?

Should JSON representation of criteria be exactly like ES JSON looks like?

If ActiveRecord implementation is chosen, will we use a single "data" serialized column for different criteria kinds, or dedicated columns for specific attributes of criteria (sparse table)?

A list of saved searches
Two rows
Save dialog