最有效的查询单词和方式的方法同义词表

时间:2016-10-21 12:22:37

标签: sql sqlite

我有一个WORDTB表,其中包含单词及其同义词:ID, WORD1, WORD2, WORD3, WORD4, WORD5。这些单词根据其频率排列。当给出任何单词时,我想查询并检索该特定单词的最常见同义词,即WORD1列中的单词。

这是我尝试的查询,但它运行正常,但我认为这是低效的。

SELECT WORD1 
FROM WORDTB 
WHERE WORD1='xxxx' 
   OR WORD2='xxxx' 
   OR WORD3='xxxx' 
   OR WORD4='xxxx' 
   OR WORD5='xxxx'

任何人都可以提出更有效的方法。

1 个答案:

答案 0 :(得分:0)

更具伸缩性的解决方案是为每个单词使用一行。

synonym_words(word_id, synonym_id, word, popularity)

字段:

  • word_id :单词的主键。
  • synonym_id :第一个同义词的word_id。
  • :同义词文字。
  • 受欢迎程度:同义词列表的排序顺序,1是最受欢迎的。

样本表数据:

word_id | synonym_id | word       | popularity
==============================================
1       | 1          | start      | 1
2       | 1          | begin      | 2
3       | 1          | originate  | 3
4       | 1          | initiate   | 4
5       | 1          | commence   | 5
6       | 1          | create     | 6
7       | 1          | startle    | 7
8       | 1          | leave      | 8
9       | 9          | end        | 1
10      | 9          | ending     | 2
11      | 9          | last       | 3
12      | 9          | goal       | 4
13      | 9          | death      | 5
14      | 9          | conclusion | 6
15      | 9          | close      | 7
16      | 9          | closing    | 8

假设单词不会改变,但随着时间的推移它们的受欢迎程度,如果您要更改单词的流行度顺序,则查询不应该中断,以便更改单词的最流行的同义词。您希望查询返回最常用的单词(popular = 1),该单词与搜索中使用的单词共享相同的synonym_id。

SQL查询:

SELECT word FROM synonym_words
WHERE synonym_id = (SELECT synonym_id FROM synonym_words WHERE word = 'conclusion')
AND popularity = 1