Skip to content
  • There are no suggestions because the search field is empty.

Database Variances

Understanding Search and Stop Word Differences Across Databases

Overview

In Innoslate v4.15 and later, search functionality across PostgreSQL 18 and Microsoft SQL Server 2022 is functionally unified. Prior releases exhibited dialect variances between database engines for full-text search, stop words, and wildcard evaluation. These behaviors now produce identical results across both supported engines.

Core Query Parity (PostgreSQL 18 & SQL Server 2022)

Across all qualified search fields (Name:, Number:, Description:, and custom schema attributes), both database engines enforce identical rules:

  • Whole-Value Anchoring: Qualified searches compare against the complete field value. An unqualified exact phrase match (such as Name:Innoslate or Description:Innoslate) matches only when the stored field equals that exact string.
  • Wildcard Semantics:

    • Asterisk (*) and percent (%) function interchangeably as multi-character wildcards.
    • Underscore (_) functions as a single-character wildcard (including punctuation like .).
    • Substring matches require leading and trailing wildcards (e.g., *MBSE* or %MBSE%).
  • Stripped Markup for Descriptions: Rich-text descriptions evaluate against raw text (description_text). Search terms match rendered content rather than HTML tags.
  • Stop Words: Field-specific qualified searches (Name:, Number:, Description:) execute directly against database columns and bypass stop-word filters entirely. Searching Name:is is treated as a literal search for the exact value "is".

Index Timing Variance: Asynchronous Crawl (SQL Server Only)

The only functional difference between PostgreSQL and Microsoft SQL Server is the index update mechanism for unqualified global full-text queries.

Search Type Example Syntax PostgreSQL 18 Availability SQL Server 2022 Availability
Qualified Attribute Search

Name:Radar*


Number:I.1.12


Description:"*cooling*"

Immediate


(Evaluates directly against table columns)

Immediate


(Evaluates directly against table columns)

Wildcard Unqualified Search

Inn*


"MB*"


_%

Immediate Immediate
Unqualified Global Full-Text Search

Innoslate


"MBSE tool"


is

Immediate


(Synchronous index update)

Delayed until crawl completes


(Asynchronous background crawl)

Operational Impact on SQL Server: Wildcard-free, unqualified searches rely on SQL Server's full-text catalog. When creating or modifying entities in SQL Server environments, these specific queries will not return newly saved entities until the asynchronous crawl cycle completes. If instant query evaluation is required immediately after saving, use qualified searches (Name:, Number:, Description:) or include wildcard syntax.

Verified Search Behavior Matrix (93 Test Suite)

All 93 standard search permutations yield matching results on PostgreSQL 18 and Microsoft SQL Server 2022:

  • Entity A Test Value: Name / Number / Description = "Innoslate is a MBSE tool" (Rows 1–67)
  • Entity B Test Value: Number = "I.1.12" (Rows 68–93)

1. Unqualified Searches (Rows 1–17)

Searches across Name, Number, and Description simultaneously.

Query Result Engine Behavior
is, Innoslate, "MBSE", "MBSE tool", Innoslate is a MBSE tool Found Substring/token match across fields. (Delayed on SQL Server until crawl completes)
"is%", "%is%", Inn*, Inn%, _n*, _%, "MB*", "MB%", "%MB%" Found Immediate match via wildcard evaluation.
_.*, _.% Not found Leading single character followed by literal dot does not match target text.

2. Qualified Name: Searches (Rows 18–34)

Query Result Reason
Name:is, Name:Innoslate, Name:"MBSE", Name:"MBSE tool", Name:Innoslate is a MBSE tool Not found Unquoted or partial terms fail whole-value anchoring.
Name:"is%", Name:"MB*", Name:"MB%" Not found Missing leading wildcard to reach interior terms.
Name:Inn*, Name:Inn%, Name:_n*, Name:_%, Name:I__oslate*, Name:_nnoslate* Found Prefix wildcard matches text starting at position 0.
Name:"%is%", Name:"%MB%" Found Bounded wildcard matches interior text.
Name:"Innoslate is a MBSE tool" Found Exact match against full string.

3. Qualified Number: Searches (Rows 35–51)

Query Result Reason
Number:is, Number:Innoslate, Number:"MBSE", Number:"MBSE tool", Number:_.*, Number:_.% Not found Fails exact whole-value match.
Number:Inn*, Number:Inn%, Number:_n*, Number:_%, Number:"%is%", Number:"%MB%" Found Wildcard syntax matches target value.
Number:"Innoslate is a MBSE tool" Found Exact match against full string.

4. Qualified Description: Searches (Rows 52–67)

Evaluates against description_text with HTML markup removed.

Query Result Reason
Description:is, Description:Innoslate, Description:"MBSE", Description:"MBSE tool", Description:"MB*" Not found Partial values without leading/trailing wildcards fail anchoring.
Description:Inn*, Description:Inn%, Description:%Inn%, Description:_n*, Description:_% Found Prefix wildcard matches beginning of stripped description.
Description:"%is%", Description:"%MB%" Found Interior wildcard matches substring.
Description:"Innoslate is a MBSE tool" Found Exact match against full rendered text.

5. Hierarchical Number Matching: I.1.12 (Rows 68–93)

Pattern Type Query Result Notes
Exact Equality Number:I.1.12 Found Exact match.
Exact Equality (Non-matches) Number:I.1, Number:I.1.1, Number:12 Not found Sub-levels and suffixes no longer match exact number queries.
Prefix Matching Number:I*, Number:I.1*, Number:I.1%, Number:I.1.12* Found Trailing wildcard captures full sequence.
Out-of-Bounds Prefix Number:I.1.123*, Number:1* Not found Does not match starting sequence.
Suffix Matching Number:*12, Number:%12, Number:*.12, Number:*1.12, Number:*I.1.12 Found Leading wildcard matches end of sequence.
Interior / Substring Number:*I.1*, Number:*1.1*, Number:%1.1%, Number:*.1.* Found Bounded wildcard matches sequence interior.
Single-Character Wildcard (_)

Number:_.1.12


Number:I._.12


Number:I.1.__


Number:I_1*

Found _ matches single characters, digits, and literal dots (.).
Single-Character Mismatch Number:I.1._ Not found Requires exactly two characters (12), but only one placeholder provided.

For a full Test Suite download of these test cases download 'SQLVPOSTGRESQLTESTSEARCHV4.15.INNO' and import into an Innoslate project for the full 93 cases.


Overview

Below is for Innoslate v4.14.3 and below.

Innoslate is compatible with both SQL and PostgreSQL databases.

While Innoslate supports multiple database backends, each handles full-text search and stop words slightly differently. The table below highlights these behavioral differences.


Search Behavior Example

To demonstrate these differences, we created four test entities:

Entity 1: Name = "Innoslate is an MBSE tool"
Entity 2: Number = "Innoslate is an MBSE tool"
Entity 3: Description = "Innoslate is an MBSE tool"
Entity 4: Number = I.1.12

Table illustrating search results across databases follows below

  Without Stop Words With Stop Words
  Microsoft SQL PostgreSQL Microsoft SQL PostgreSQL
Name:  
Name:is X X E E
Name:"is*" X X P X
Name:"is%" X X P X
Name:"%is%" X X X X
Name:"*is*" X X X X
Name:Innoslate X X X X
Name:Inn* X X X X
Name:Inn% X X X X
Name:_n* X X X X
Name:_n% X X X X
Name:"MB*" X X X X
Name:"MB%" X X X X
Name:"*MB*" X X X X
Name:"%MB%" X X X X
Name:"MBSE" X X X X
Name:"MBSE tool" X X X X
Name:"Innoslate is a MBSE tool" X X X X
Number:  
Number:2 X X X X
Number:2. X X X X
Number:2* X X * X
Number:2% X X * X
Number:is X X X X
Number:"is*" X X X X
Number:"is%" X X * X
Number:"*is*" X X X X
Number:"%is%" X X X X
Number:_.* X X X X
Number:_.% X X X X
Number:Innoslate X X X X
Number:Inn* X X X X
Number:Inn% X X X X
Number:_n* X X X X
Number:_n% X X X X
Number:"MB*" X X X X
Number:"MB%" X X X X
Number:"*MB*" X X X X
Number:"%MB%" X X X X
Number:"MBSE" ** X ** X
Number:"MBSE tool" ** X ** X
Number:"Innoslate is a MBSE tool" X X X X
Description:  
Description:is X X E E
Description:"is*" X X X X
Description:"is%" X X X X
Description:"*is*" X X X X
Description:"%is%" X X X X
Description:Innoslate X X X X
Description:Inn* X X X X
Description:Inn% X X X X
Description:*Inn* ** ** ** **
Description:%Inn% X X X X
Description:_n* ** X ** X
Description:_n% ** X ** X
Description:"MB*" X X X X
Description:"MB%" X X X X
Description:"*MB*" X X X X
Description:"%MB%" X X X X
Description:"MBSE" X X X X
Description:"MBSE tool" X X X X
Description:"Innoslate is a MBSE tool" X X X X
ALL:  
is X X E E
"is*" X X X X
"is%" X X X X
"*is*" X X X X
"%is%" X X X X
Innoslate X X X X
Inn* X X X X
Inn% X X X X
*Inn* ** ** ** **
%Inn% X X X X
_n* X X X X
_n% X X X X
"MB*" X X X X
"MB%" X X X X
"*MB*" X X X X
"%MB%" X X X X
MBSE X X X X
"MBSE" X X X X
"MBSE tool" X X X X
Innoslate is a MBSE tool X X X X
"Innoslate is a MBSE tool" X X X X
_.* X X X X
_.% X X X X
Innoslate is a MB* X X X X
Innoslate is a MB% X X X X
E: Stop word, so all results are true
P: Partial with words that start with word, but wont contain the stop words itself
* Give less than original version
** Invalid Searches