Confirm with with https://demo.indiscale.com/
Queries FIND MusicalInstrument WITH Manufacturer = "Antonio Stradivari" and FIND MusicalInstrument WITH Manufacturer != "Antonio Stradivari" yield the same results (only the first is correct).
B: 266 seems to correctly add the != operator: callPOV.setString(5, getOperator()); as it appears in the XML response as: <Filter><POV property="Manufacturer" operator="!=" value="Antonio Stradivari" /></Filter>
Check this query:
FIND MusicalInstrument WITH price != 814873.0
-> It seems to work for double properties.
The problem seems to be the name resolving in reference properties, because this one also works:
FIND MusicalInstrument WITH Manufacturer with name = "Antonio Stradivari"
and
FIND MusicalInstrument WITH Manufacturer with name != "Antonio Stradivari"
However it's weird that these two also yield the same results:
FIND MusicalInstrument WITH Manufacturer != 119
FIND MusicalInstrument WITH Manufacturer = 119
and furthermore this one:
FIND MusicalInstrument WITH Manufacturer > 119
It seems like the operator is ignored in case of comparing reference properties.
That makes sense if I look at the SQL statement which does not involve the operator (called "o"):
SETsRefData=IF(vTextISNULL,' UNION ALL SELECT DISTINCT domain_id, entity_id, _get_head_iversion(entity_id) AS _iversion, property_id FROM `reference_data` UNION ALL SELECT DISTINCT domain_id, entity_id, _iversion, property_id FROM `archive_reference_data`',IF(refIdsTableISNULL,NULL,CONCAT(' UNION ALL SELECT DISTINCT domain_id, entity_id, _get_head_iversion(entity_id) AS _iversion, property_id FROM `reference_data` AS subdata WHERE EXISTS (SELECT 1 FROM `',refIdsTable,'` AS refIdsTable WHERE subdata.value=refIdsTable.id LIMIT 1) UNION ALL SELECT DISTINCT domain_id, entity_id, _iversion, property_id FROM `archive_reference_data` AS subdata WHERE EXISTS (SELECT 1 FROM `',refIdsTable,'` AS refIdsTable WHERE subdata.value=refIdsTable.id LIMIT 1)')));