与Oracle文本搜索最匹配,包括短字符串

与Oracle文本搜索最匹配,包括短字符串,oracle,oracle11g,full-text-search,oracle-text,Oracle,Oracle11g,Full Text Search,Oracle Text,我想在数据库列中找到与给定字符串最匹配的字符串。搜索之后,我得到了下表和查询 CREATE TABLE docs (id NUMBER PRIMARY KEY, text VARCHAR2(200)); INSERT INTO docs VALUES(1, 'California is a state in the US.'); INSERT INTO docs VALUES(2, 'Paris is a city in France.'); INSERT INTO docs VALUES(3,

我想在数据库列中找到与给定字符串最匹配的字符串。搜索之后,我得到了下表和查询

CREATE TABLE docs (id NUMBER PRIMARY KEY, text VARCHAR2(200));
INSERT INTO docs VALUES(1, 'California is a state in the US.');
INSERT INTO docs VALUES(2, 'Paris is a city in France.');
INSERT INTO docs VALUES(3, 'France is in Europe.');
INSERT INTO docs VALUES(4, 'Paris');

CREATE INDEX idx_docs ON docs(text)
     INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
     ('DATASTORE CTXSYS.DEFAULT_DATASTORE');

SELECT SCORE(1), id, text 
  FROM docs 
 WHERE CONTAINS(text, 'fuzzy(Parsi,1,1)', 1) > 0;
我已将相似性分数设置为最小值,即1。它适用于搜索字符串,如“Parsi”或“Parse”。它给了我想要的结果。但是如果搜索字符串太小,比如“par”或“pa”,它不会显示任何结果


即使使用很短的字符串进行搜索,我也应该如何获得最接近的匹配?

基本上,您遇到了一个问题

与词干展开不同,由模糊逻辑生成的字数 扩展取决于索引中的内容。结果可能会有所不同 根据索引的内容显著增加

除非您更改默认值,否则oracle不会:

begin 
ctx_ddl.create_preference('mywordlist', 'BASIC_WORDLIST'); 
ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE');
ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH', '3');
ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH', '4');
ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX', 'YES');
end;

在这种情况下,您可能实际上必须使用组合键组合模糊查询和通配符查询。根据我的经验,通配符扩展往往会显著降低所有操作的速度,尽管这可能只是正确的索引配置问题。

您基本上遇到了问题

与词干展开不同,由模糊逻辑生成的字数 扩展取决于索引中的内容。结果可能会有所不同 根据索引的内容显著增加

除非您更改默认值,否则oracle不会:

begin 
ctx_ddl.create_preference('mywordlist', 'BASIC_WORDLIST'); 
ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE');
ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH', '3');
ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH', '4');
ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX', 'YES');
end;

在这种情况下,您可能实际上必须使用组合键组合模糊查询和通配符查询。根据我的经验,通配符扩展往往会大大降低速度,尽管这可能只是正确的索引配置问题。

表中的数据不是较短的字符串。这是搜索字符串short@BruceWayne重要的是索引中的内容。在您的例子中,它不包含较短的前缀。表中的数据不是较短的字符串。这是搜索字符串short@BruceWayne重要的是索引中的内容。在您的情况下,它不包含较短的前缀。