优化简单的搜索算法

Ace*_*Ace 8 java optimization search

我一直在玩一个相当简单的自制搜索引擎,我现在正在考虑一些相关性排序代码.

它不是很漂亮,但是当谈到聪明的算法时我不是很好,所以我希望我能得到一些建议:)

基本上,我希望每个搜索结果都根据与搜索条件匹配的单词数得分.每个精确单词3分,部分匹配1分

例如,如果我搜索"冬天的雪",这些将是结果:

  • 冬天的 => 6点
  • 冬天 下雪 => 4分
  • 冬季土地 => 4分
  • 冬日阳光=> 3分
  • 冬季土地 ING => 2分

这是代码:

String[] resultWords = result.split(" ");
String[] searchWords = searchStr.split(" ");
int score = 0;
for (String resultWord : resultWords) {
    for (String searchWord : searchWords) {
        if (resultWord.equalsIgnoreCase(searchWord))
            score += 3;
        else if (resultWord.toLowerCase().contains(searchWord.toLowerCase()))
            score++;
    }
}
Run Code Online (Sandbox Code Playgroud)

bru*_*nde 3

你的代码对我来说似乎没问题。我建议做一些小的改变:

由于您正在尝试所有可能的组合,因此您可能会toLowerCase()在一开始就感到沮丧。

此外,如果已经发生完全匹配,则无需执行另一个equals.

    result = result.toLowerCase();
    searchStr = searchStr.toLowerCase();

    String[] resultWords = result.split(" ");
    String[] searchWords = searchStr.split(" ");
    int score = 0;
    for (String resultWord : resultWords) {
        boolean exactMatch = false;
        for (String searchWord : searchWords) {
            if (!exactMatch && resultWord.equals(searchWord)) {
                exactMatch = true;
                score += 3;
            } else if (resultWord.contains(searchWord))
                score++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

当然,这是一个非常基础的水平。如果您确实对计算机科学的这一领域感兴趣并且想要了解有关实现搜索引擎的更多信息,请从以下术语开始: