(编辑) Linux上的DB2 10.5.0
希望有人可能有一些见解。我或多或少被迫使用DB2,因此无法使用弹性搜索等方法。
假设我有一个包含单列COMPANY_NAME VARCHAR(240)
的简单表。运行db2ts并在其上运行文本搜索索引。
我有这样的公司名称:
MY GENERAL COMPANY
MY COMPANY
MY SUPER AWESOME COMPANY
MY COMPANY NAMED DUDE
MYLO COMPANIO
我执行查询:
SELECT COMPANY_NAME FROM COMPANY_TABLE WHERE CONTAINS('MY COMPANY~0.6') = 1
我可以使用SCORE对结果进行排序,但所有SCORE都会计算单词在文本中出现的次数。因此,在这种情况下,SCORE会将该姓氏排在底部,但所有其他名称都相同。没用。
我真正想要的是一个"亲和力排名"根据CONTAINS如何决定选择结果集。直觉上,我希望人类接受这个排名列表作为答案:
COMPANY_NAME
---------------------------
MY COMPANY
MY COMPANY NAMED DUDE
MY GENERAL COMPANY
MY SUPER AWESOME COMPANY
MYLO COMPANIO
我从上面的CONTAINS得到了结果集,这很好。我无法弄清楚如何将结果集设置为ORDER BY"亲和力来搜索术语"
答案 0 :(得分:0)
只是一个猜测...认为你想使用package com.company;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) throws InterruptedException {
// your given string
String x = "dasamdw";
// map to store each letter:numberOfRepetition pairs (I used TreeMap just to print letters alphabetically)
Map<String, Integer> letters = new TreeMap<>();
// stream of char[] from the given string, add letter to the map if it doesnt exist with value 1
// if it already exists, just increase value by 1
Arrays.stream(x.split("")).forEach(y -> letters.put(y, letters.get(y) == null ? 1 : letters.get(y) + 1));
// loop over map and print out the results of lambda above
for (Map.Entry s : letters.entrySet()) {
System.out.print(s.getKey() + "" + s.getValue());
}
}
}
...它不应该返回1,它应该返回0到1之间的值。
SCORE()