diff --git a/src/backend/tsearch/dicts/ispell_sample.affix b/src/backend/tsearch/dicts/ispell_sample.affix
index f29004ff1d..93b8d5435c 100644
--- a/src/backend/tsearch/dicts/ispell_sample.affix
+++ b/src/backend/tsearch/dicts/ispell_sample.affix
@@ -5,6 +5,9 @@ prefixes
 flag *B:
 	.       >   RE      # As in enter > reenter
 
+flag E:
+	.       >   IN\-    # As in law > in-law
+
 flag U:
     .       >   UN      # As in natural > unnatural
 
diff --git a/src/backend/tsearch/dicts/ispell_sample.dict b/src/backend/tsearch/dicts/ispell_sample.dict
index 44df1967a6..558c7154c1 100644
--- a/src/backend/tsearch/dicts/ispell_sample.dict
+++ b/src/backend/tsearch/dicts/ispell_sample.dict
@@ -5,4 +5,5 @@ foot/ZS
 football/Z
 ball/SZ\
 klubber/Z
+law/E
 sky/A
diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c
index 8aab96d3b0..2b1378d5b5 100644
--- a/src/backend/tsearch/spell.c
+++ b/src/backend/tsearch/spell.c
@@ -909,6 +909,7 @@ parse_affentry(char *str, char *mask, char *find, char *repl)
 	char	   *pmask = mask,
 			   *pfind = find,
 			   *prepl = repl;
+	bool		backslashed = false;
 
 	*mask = *find = *repl = '\0';
 
@@ -996,15 +997,20 @@ parse_affentry(char *str, char *mask, char *find, char *repl)
 				*prepl = '\0';
 				break;
 			}
-			else if (t_isalpha(str))
+			else if (t_isalpha(str) || (backslashed && t_iseq(str, '-')))
 			{
 				COPYCHAR(prepl, str);
 				prepl += pg_mblen(str);
 			}
+			else if (t_iseq(str, '\\'))
+				backslashed = true;
 			else if (!t_isspace(str))
 				ereport(ERROR,
 						(errcode(ERRCODE_CONFIG_FILE_ERROR),
 						 errmsg("syntax error")));
+
+			if (!t_iseq(str, '\\'))
+				backslashed = false;
 		}
 		else
 			elog(ERROR, "unrecognized state in parse_affentry: %d", state);
diff --git a/src/test/regress/expected/tsdicts.out b/src/test/regress/expected/tsdicts.out
index c804293142..5a0353f552 100644
--- a/src/test/regress/expected/tsdicts.out
+++ b/src/test/regress/expected/tsdicts.out
@@ -71,6 +71,19 @@ SELECT ts_lexize('ispell', 'unbook');
  {book}
 (1 row)
 
+-- Test for hyphen escaping
+SELECT ts_lexize('ispell', 'in-law');
+ ts_lexize 
+-----------
+ {law}
+(1 row)
+
+SELECT ts_lexize('ispell', 'law');
+ ts_lexize 
+-----------
+ {law}
+(1 row)
+
 SELECT ts_lexize('ispell', 'footklubber');
    ts_lexize    
 ----------------
diff --git a/src/test/regress/sql/tsdicts.sql b/src/test/regress/sql/tsdicts.sql
index ddc6c7f445..cf901ec08b 100644
--- a/src/test/regress/sql/tsdicts.sql
+++ b/src/test/regress/sql/tsdicts.sql
@@ -19,6 +19,10 @@ SELECT ts_lexize('ispell', 'unbookings');
 SELECT ts_lexize('ispell', 'unbooking');
 SELECT ts_lexize('ispell', 'unbook');
 
+-- Test for hyphen escaping
+SELECT ts_lexize('ispell', 'in-law');
+SELECT ts_lexize('ispell', 'law');
+
 SELECT ts_lexize('ispell', 'footklubber');
 SELECT ts_lexize('ispell', 'footballklubber');
 SELECT ts_lexize('ispell', 'ballyklubber');
